Rails rspec / webrat - 看不到复选框

时间:2012-03-11 18:59:51

标签: ruby-on-rails-3 rspec2 rspec-rails webrat

我遇到了webrat看不到复选框的问题。我有一些像这样的代码(haml):

    = form_for(@advanced_search, :url => searches_path, :method => 'get', :html => {:class => 'well', :id => 'advanced-search'}) do |f|
Availability
          - @advanced_search.availability_types.each do |avail_type|
            = check_box_tag "search[availability_types][kind][#{avail_type.id}]", avail_type.id, checked = true, :class => 'checkbox'
            = avail_type.kind

产生这个: checkboxes

这都是有效的HTML,功能正常。但是,当我去测试时,我没有在响应中看到任何复选框。

示例测试:

it "should have checkboxes" do
  get :index
  response.should have_selector("form") do |node|
    node.should have_selector('input', :type => 'checkbox')
  end
end

输出:

    expected following output to contain a <input type='checkbox'/> tag:
Availability
<br><input class="btn" name="commit" type="submit" value="Search">

复选框没有显示,我不知道为什么。我认为将它们标记为已选中可能会因为带有复选框的html时髦性,但它似乎没有任何效果。

修改1 我知道,如果我这样做:

Availability
      - @advanced_search.availability_types.each do |avail_type|
        = check_box_tag "search[availability_types][kind][#{avail_type.id}]", avail_type.id, checked = true, :class => 'checkbox'
        = avail_type.kind
      = check_box_tag "search[availability_types][kind][8]", 8, checked = true, :class => 'checkbox'

非动态生成的复选框显示正常:

Availability
<input checked class="checkbox" id="search_availability_types_kind_8" name="search[availability_types][kind][8]" type="checkbox" value="8">

修改2

我错过了测试数据库中的数据...... Doh。我之前添加了这些创建,现在我的复选框显示出来了。

before(:each) do
  AvailabilityType.create!({:kind => 'Full-time'})
  AvailabilityType.create!({:kind => 'Part-time'})
  AvailabilityType.create!({:kind => 'No Availability'})
end

2 个答案:

答案 0 :(得分:2)

availability_types似乎是从ActiveRecord表加载的,对吗?如果是这样,我认为您可能没有将数据加载到该表中,这样当您迭代availability_types的类型时,您甚至不会进入该块。

你有spec/fixtures/availability_types.yml加载数据吗?另一种选择是模拟该测试的数据或使用工厂或原始AR创建来为测试创建数据。

答案 1 :(得分:0)

默认情况下,AFAIK控制器规范不会渲染视图。在“get:index”之后调用“render”,你应该渲染视图。这会稍微减慢规格。

实际上,此测试可能实际上属于视图规范。