2012-02-19 157 views
1

我最近有一個小型的Rails項目可以幫助我學習環境和相關的語言/工具(Ruby,Cucumber,RSpec,Haml ...) 。水豚在黃瓜測試期間在Capybara :: ElementNotFound上失敗

最近卡住了什麼是我決定從one scenario去多個this gist看到。當我介紹了第二個方案中,我注意到,礦物堆的總價值不總結,這造成了一個事實,「我已經開採礦物的」步驟定義是這樣的:

Given /^I have mined "([^"]*)" of that mineral$/ do |amount| 
    visit(root_path) 
    fill_in(@mineral.name, :with => amount) 
end 

罪魁禍首顯然是一次訪問(root_path)調用,只要填入新字段,就會重置已填寫的字段。但需要注意的是,除了最終「Total value:」失敗之外,所有的測試都是綠色的。

我決定,因爲所有在這個功能中完成的東西都需要在索引/根頁面上(我稍後可能會更改),我將它放入一個Background:塊。相應的步驟定義不過是將訪問(root_path)行提取到其自己的步驟中。

然而,這導致每FILL_IN()調用失敗,出現以下(或非常類似的東西):

cannot fill in, no text field, text area or password field with id, name, or label 'tritanium' found (Capybara::ElementNotFound) 
(eval):2:in `fill_in' 
./features/step_definitions/miner_converts_minerals.rb:12:in `/^I have mined (\d+) of that mineral$/' 
features/miner_converts_minerals.feature:12:in `And I have mined <amount> of that mineral' 

我對這個問題的看法是,由於某種原因,在Background: ISN頁面的訪問不會持續,並忘記它到達那裏......出於某種原因。請注意(如上所述),只要訪問(root_path)移出「我已開採...」一步,就會立即停止工作 - 逐步進入一個單獨的步驟,導致我猜測訪問必須在相同的內部完成阻止,但我可能是錯的。

編輯:我試着使用save_and_open_page方法來查看這個頁面上實際顯示的水豚無法找到的元素。事實證明,「計算」按鈕在那裏,但表中沒有任何字段在那裏。看起來問題在於這些字段沒有生成。

我認爲解決這個問題的所有相關代碼都可以在上面提到的要點中找到。謝謝閱讀!

回答

1

原來,主要是由於測試數據庫具有Mineral表但沒有導入行的事實。

這反過來又導致find_or_create_by_name方法能夠創建在測試中提到的礦物質,而不是其他的,給予當"Given I have mined..." - 塊中加入visit(root_path)調用(在有些工作的假象。特徵文件)。

解決的辦法是正確地給測試數據庫播種,然後用find_by_name代替find_or_create_by_name