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

我的理论是这样的

  1. database_cleaner无法按预期运行。 (虽然我在test.log文件中看到DB清理sql命令,但我看到数据保留在数据库中)

  2. visit不会创建新的@sale (如此处所述尽管我使用minitest)因为#sal_payment_btn未呈现(销售已经在首次运行时payment )。

我现在把头发拉了半天。 我试过了

  • webkit驱动程序
  • 不同的清洁策略truncationdeletion

我仍然无法通过第二次测试。 手动测试运行正常。

我做错了什么,哪里做错了?

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策略。

我学到了什么

好像我学不够。 我在寻找答案时发现了以下内容。

  1. 有人问为什么数据库更清洁的交易策略不适用于Cucumber和Selenium? – 没有答案

  2. 如何使用Cucumber和RSpec为Rails设置database_cleaner表示

    :transaction策略不适用于Selenium

  3. database_cleaner自述文件声明:transaction策略强加了一些工作

    但是,如果最终需要在测试中使用多个数据库连接(即测试运行的程序与应用程序不同),那么使用此策略会变得有点困难

其他有价值的阅读