2013-05-31 83 views
0

我正在使用水豚測試我正在寫一個小的Web應用程序。它拒絕從選擇中選擇正確的項目。代碼如下:水豚不會選擇項目從選擇

before do 
    fill_in 'Assignment', with: "blah blah blah" 
    select student.name, from: "assignment[student_id]" 
    end 

我試過「from」字段中的所有支持的格式。我使用了id,名稱和標籤文本來嘗試選擇正確的元素。我甚至在測試中啓動了Rails服務器,並在控制檯中手動執行測試中的步驟。無論我做什麼,水豚踢回:

cannot select option, no option with text 'John Doe' in select box 'assignment[student_id]' 

如前所述,我已經踢了在測試環境中軌服務器,然後手動將用戶添加到數據庫中以同樣的方式我已經在我的測試完成。我對選擇框'作業[學生]'中的文字「John Doe」確實有一個選項的100%信心。這導致我相信我必須錯誤地使用select方法。有人能夠啓發我嗎?

+0

您可以添加選擇框的代碼,只是要加倍確定。 – Matt

+0

嘗試運行'all('#assignment [student_id]>選項')。each {| el |放入el.text(:all)}'來檢查這個選項是否存在。 –

回答

0

選擇from:是否需要選擇字段名稱或ID? 與ID代替(假設標準型風格)試試:

select student.name, from: "assignment_student_id" 

如果您選擇元素上檢查源可以確認域ID。

它是否使用選項元素的值而不是文本?再次檢查並查看「John Doe」的價值,並通過使用student.id查看它是否有效。

select student.id, from: "assignment[student_id]" 

最後,您是否嘗試過包含該頁面的文檔中的語法?

page.select student.name, :from => 'assignment[student_id]' 
+0

如果'select'沒有按名稱查找元素,它將不會通過id找到它,因爲[此方法支持其中任何一個](http://rubydoc.info/github/jnicklas/capybara/master/Capybara/節點/操作#選擇-instance_method)。 –

+0

另外'select'只檢查選項的文本,以便您的第二條建議也不正確。 –

0

問題不在於選擇代碼。我忘了FactoryGirl是如何工作的。我通過Factory Girl創建的用戶關係調用了構建,然後嘗試通過let將該結果分配給學生。不幸的是,既然let是懶惰的,當它需要的時候並沒有被創建,所以基本上這個頁面在學生對象創建之前就被調用了。我把我的let語句中的代碼移動到之前,然後使用let和User.students.first分配給學生。