2012-03-11 61 views
1

我遇到了webrat無法看到複選框的問題。我有這樣的(HAML)的一些代碼:Rails rspec/webrat - 看不到複選框

= 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

availability_types似乎是從ActiveRecord表中加載的,對嗎?如果是這樣,我認爲你可能沒有將數據加載到該表中,因此當你迭代availability_types類型時,甚至不會輸入該數據塊。

你有spec/fixtures/availability_types.yml加載數據嗎?另一種選擇是爲該測試嘲笑該數據或使用工廠或原始AR創建來爲測試創建數據。

+0

這就是答案!我之前並沒有添加數據(:each) – ryanjones 2012-03-12 17:19:22

0

AFAIK控制器規格默認不顯示視圖。在「get:index」之後調用「呈現器」,你應該呈現視圖。這會稍微降低規格。

真的,這個測試可能實際上屬於視圖規範。

+0

我的控制器頂部有render_views。我認爲這是一個幫助者,可以做同樣的事情。我所有的其他測試都可以正常工作(例如檢查單詞「可用性」是否存在) – ryanjones 2012-03-11 19:12:29