【发布时间】:2012-03-10 04:47:50
【问题描述】:
我最近获得了一个小型 Rails 项目,该项目将帮助我学习环境和相关的语言/工具(Ruby、Cucumber、RSpec、Haml...)。
最近让我陷入困境的是,我决定从 one scenario 转到 this gist 中看到的多个。当我介绍第二种情况时,我注意到没有汇总矿物堆的总值,这是因为“我已经开采了该矿物”的步骤定义如下:
Given /^I have mined "([^"]*)" of that mineral$/ do |amount|
visit(root_path)
fill_in(@mineral.name, :with => amount)
end
罪魁祸首显然是 visit(root_path) 调用,它会在填写新字段后立即重置已填写的字段。然而,重要的是要注意,除了“总价值:”这一事实之外最后,所有的测试都是绿色的。
我决定,由于此功能中完成的所有内容都需要在索引/根页面上(我稍后可能会更改),因此我将其放入 Background: 块中。对应的步骤定义无非就是将visit(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: 中的页面的访问不是持久的,并且它忘记了它到达那里......出于某种原因。请注意,(如上所述)一旦将访问(root_path)移出“我已经开采......”,它就会停止工作 - 进入一个单独的步骤,让我猜测访问必须在同一个内部完成阻止,但我可能是错的。
编辑:我尝试使用save_and_open_page 方法查看Capybara 无法找到元素的页面上实际显示的内容。事实证明,“计算”按钮在那里,但表中的任何字段都不在那里。看起来问题在于没有生成字段。
我认为解决此问题的所有相关代码都可以在上述要点中找到。感谢阅读!
【问题讨论】:
标签: ruby-on-rails cucumber capybara