使用RSpec在Rails中测试视图助手

时间:2010-08-23 02:46:51

标签: ruby-on-rails ruby rspec helper

我需要测试以下帮助器:

def display_all_courses
  @courses = Course.all

  output =  ""

  for course in @courses do
    output << content_tag(:li, :id => course.title.gsub(" ", "-").downcase.strip) do
      concat content_tag(:h1, course.title)
      concat link_to("Edit", edit_course_path(course))
    end
  end

  return output
end 

我想知道是否有办法可以测试它的输出。基本上,我只是想测试帮助器给我正确数量的li元素,也许是没有任何课程的情况。

我的第一个想法是做这样的事情:

describe DashboardHelper do
  describe display_all_courses do
    it "should return an list of all the courses" do
      7.times{Factory(:course)
      html = helper.display_all_courses
      html.should have_selector(:li)
    end
  end
end

这很好用。但是,如果我将:count选项添加到has_selector调用它突然失败,有人可以帮我找出原因吗?

3 个答案:

答案 0 :(得分:5)

我相信你要找的是has_tag和with_tag RSpec助手

describe DashboardHelper do
  describe display_all_courses do
    it "should return an list of all the courses" do
      7.times{ Factory(:course) }
      helper.display_all_courses.should have_tag('ul') do
        with_tag('li', 3)
      end
    end
  end
end

答案 1 :(得分:1)

也许它可以帮助将html视为xml? 在这种情况下,this link可以提供帮助。

它定义了匹配器have_xml,它可能正是您所需要的。 虽然我知道如果have_tag也能用于字符串会更好。

答案 2 :(得分:-8)

显然,模板是执行此操作的最佳方式。