以下测试首次通过(rake db:test:prepare
之后),但失败在后续运行中出错。
Capybara :: ElementNotFound:无法找到css"#sale_payment_btn"
require "test_helper"
DatabaseCleaner.strategy = :transaction
class SaleFeatureTest < Capybara::Rails::TestCase
include Warden::Test::Helpers
Warden.test_mode!
self.use_transactional_fixtures = false
setup do
login_as users(:admin), scope: :user
Capybara.current_driver = :selenium #:webkit
DatabaseCleaner.start
end
teardown do
DatabaseCleaner.clean
Warden.test_reset!
end
test "Sale" do
visit(new_sale_path) # create new sale and redirect to it
assert page.has_css?('#sale_payment_btn') # gave error at second time
find(:css, '#sale_payment_btn').click # this create payment
end
当我使用硒和铬时,我可以看到销售的ID。我注意到后续测试的ID是相同的。即980190963
我的理论是
database_cleaner
无法按预期运行。 (虽然我在test.log
文件上看到DB清理sql命令,但我看到数据仍在数据库中)
visit
未创建新的@sale
(如我所说的here虽然我使用minitest)因为#sal_payment_btn
未呈现(销售已经payment
在第一次运行)。
我现在把头发拉了半天。我试过了
webkit
司机truncation
,deletion
我仍然无法通过第二次测试。它在手动测试中运行正常。
我做错了什么,在哪里?
P.S。我使用以下宝石
minitest-rails-capybara
selenium-webdriver
chromedriver-helper
database_cleaner
minitest-around
pg
我已阅读以下内容
答案 0 :(得分:3)
我已确认问题出在database_cleaner
上。
:transaction
策略无法用于我的设置cucumber
+ webkit
/ selenium
。已更改为:deletion
策略。
似乎我没有足够的学习。我在寻找答案时发现了以下内容。
有人问Why is the database cleaner transaction strategy not working with Cucumber and Selenium? - 没有回答
How to set up database_cleaner for Rails with Cucumber and RSpec表示
:transaction
策略不适用于Selenium
database_cleaner
readme表示:transaction
策略更加有效
但是,如果最终需要在测试中使用多个数据库连接(即测试运行的程序与应用程序不同),那么使用此策略会变得更加困难
deletion
strategy database_cleaner
,rails
,rspec
和capybara
- http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/ selenium
的最佳方法