我正在使用Rspec,Capybara和Selenium (WebDriver)来测试我的Rails应用,一个简单的在线商店。以下是该规范的一个简化版本,但它失败了:
describe 'Team Order' do
let(:product) { Product.last }
before do
create :product_with_color_and_size
end
it 'goes to product page', js: true do
visit add_team_order_path(product)
expect(page).to have_content(product.name)
end
end具体地说,Selenium驱动的Firefox窗口显示我的应用程序的404页面,导致对产品名称的检查失败。
当我从it块中调用debugger并查询Product.last时,我可以在测试数据库中看到有问题的产品。所以我怀疑Selenium命中了我的app...or的错误实例。
不确定这是否相关,但浏览器指向http://127.0.0.1:49736/products/product-10/add-team-order (尽管端口在rspec运行之间会发生变化)。
我的问题是,我可以做些什么来验证它是否命中了正确的实例?如果不是,我可以采取哪些步骤来修复is?
编辑:
Spec_helper.rb中的database_cleaner配置:
RSpec.configure do |config|
config.before :suite do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with :truncation
end
config.before :each do
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end发布于 2014-03-29 07:09:42
问题最终被证明是database_cleaner与我的js: true规格冲突。一个不错的总结:
问题总是一样的:测试被包装在数据库事务中,因此在实际测试进程之外运行的任何代码(例如,为Selenium驱动的浏览器请求提供服务的服务器进程)都看不到我精心组装的数据库fixture。
更多信息,以及我的解决方案,请访问:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/
https://stackoverflow.com/questions/22698624
复制相似问题