我遇到了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
产生这个:
这都是有效的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
答案 0 :(得分:2)
availability_types
似乎是从ActiveRecord表加载的,对吗?如果是这样,我认为您可能没有将数据加载到该表中,这样当您迭代availability_types
的类型时,您甚至不会进入该块。
你有spec/fixtures/availability_types.yml
加载数据吗?另一种选择是模拟该测试的数据或使用工厂或原始AR创建来为测试创建数据。
答案 1 :(得分:0)
默认情况下,AFAIK控制器规范不会渲染视图。在“get:index”之后调用“render”,你应该渲染视图。这会稍微减慢规格。
实际上,此测试可能实际上属于视图规范。