MiniTest,Capybara,Fixture,Database_Cleaner第二次不通过
以下测试首次通过(在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
当我用铬selenium时,我可以看到销售的ID。 我注意到后续测试的ID是相同的。 即980190963
我的理论是这样的
-
database_cleaner
无法按预期运行。 (虽然我在test.log
文件中看到DB清理sql命令,但我看到数据保留在数据库中) -
visit
不会创建新的@sale
(如此处所述尽管我使用minitest)因为#sal_payment_btn
未呈现(销售已经在首次运行时payment
)。
我现在把头发拉了半天。 我试过了
-
webkit
驱动程序 - 不同的清洁策略
truncation
,deletion
我仍然无法通过第二次测试。 手动测试运行正常。
我做错了什么,哪里做错了?
PS我正在使用以下gem
minitest-rails-capybara selenium-webdriver chromedriver-helper database_cleaner minitest-around pg
我已阅读以下内容
- http://blog.berylliumwork.com/2013/07/rails-4-devise-3-minitest-and-capybara.html
- 数据库清理程序不在最小的轨道中工作
- Rails minitest,数据库更清洁如何转为use_transactional_fixtures = false
我已经确认问题是我的database_cleaner
设置。
精简版
:transaction
策略不适用于我的设置cucumber
+ webkit
/ selenium
。 更改为:deletion
策略。
我学到了什么
好像我学不够。 我在寻找答案时发现了以下内容。
-
有人问为什么数据库更清洁的交易策略不适用于Cucumber和Selenium? – 没有答案
-
如何使用Cucumber和RSpec为Rails设置database_cleaner表示
:transaction
策略不适用于Selenium -
database_cleaner
自述文件声明:transaction
策略强加了一些工作但是,如果最终需要在测试中使用多个数据库连接(即测试运行的程序与应用程序不同),那么使用此策略会变得有点困难
其他有价值的阅读
- 为什么你应该使用Database Cleaner的
deletion
策略 - 建议使用
rails
,rspec
,capybara
和selenium
设置database_cleaner
方法 – http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/ - 用户登录的Rails 4,Devise 3,MiniTest和Capybara