2014-01-13 97 views
1

我的觀點的快照:水豚選擇(「單選按鈕」)不工作

<%= form_for @request do |f| %> 
    <div class="form-group"> 
    <%= f.radio_button(:item, "Snow/waterproof shell (upper)") %> 
    <%= f.label(:item, "Snow/waterproof shell (upper)") %> 
    </br> 
    <%= f.radio_button(:item, "Headlamp") %> 
    <%= f.label(:item, "Headlamp") %> 
    </div> 

然而,在我的Rspec的集成測試文件(規格/請求/ requests_spec.rb),當我寫(注意選擇單選按鈕是用戶從列表中請求項目的形式的一部分,並且測試是針對提交後的結果頁面進行的,其應該指示用戶請求的項目)。我使用的寶石「RSpec的護欄」,「2.13.1」

describe "Requests" do 
    subject { page } 

    describe "new request" do 
    before { visit root_path } 

    describe "with valid information" do 
     before do 
     choose("Snow/waterproof shell (upper)") 
     click_button submit 
     end 

     it { should have_content("Snow/waterproof shell (upper)") 
    end 
    end 
end 

我總是得到錯誤:

←[31mFailure/Error:←[0m ←[31mchoose("Snow/waterproof shell (upper)")←[0m 
←[31mCapybara::ElementNotFound←[0m: 
←[31mUnable to find radio button "Snow/waterproof shell (upper)"←[0m 
←[36m # ./spec/requests/requests_spec.rb:24:in `block (4 levels) in <top (required)>'←[0m 

相同的,如果我嘗試選擇(「頭燈」)或任何其他選項。任何想法聰明的人?這看起來像是那麼容易...

回答

5

我已經有過這個問題多次。如果你根據自己的DOM中的ID選擇表單元素它更可靠:

before do 
    choose 'request_item_headlamp' 
    click_button submit 
end 

我不能沒有看ID軌會想出給其他無線按鈕告訴。只需在chrome中右擊它,檢查元素,然後將元素ID剪切並粘貼到測試中。

+0

完美!非常感謝!!! – james

0

我懷疑有時choose不能可靠地檢查單選按鈕,這可能是因爲動畫正在進行。

如果您懷疑這導致您的choose調用不可靠,請嘗試禁用動畫,例如在測試環境中將其執行時間設置爲0秒。或者在您的測試中建立等待期以完成動畫。