2012-02-19 86 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