2

以下测试第一次通过(之后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 相同。IE980190963

我的理论是

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

  2. visit不会创建新的(尽管我使用了 minitest ,但@sale正如这里所说),因为没有渲染(首次运行时#sal_payment_btn已经有销售)。payment

我现在正在拉头发半天。我努力了

  • webkit司机
  • 不同的清洁策略truncationdeletion

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

我在哪里做错了什么?

PS我正在使用以下宝石

minitest-rails-capybara
selenium-webdriver
chromedriver-helper
database_cleaner
minitest-around
pg

我已阅读以下内容

4

1 回答 1

3

我已经确认问题出在我的database_cleaner.

精简版

:transaction策略不适用于我的设置cucumber+ webkit/ selenium。改为:deletion策略。

我学到了什么

看来我学得还不够。在寻找答案的过程中,我发现了以下内容。

  1. 有人问为什么数据库清理器事务策略不适用于 Cucumber 和 Selenium?- 没有答案

  2. How to setup database_cleaner for Rails with Cucumber 和 RSpec指出

    :transaction策略不适用于 Selenium

  3. database_cleaner自述文件指出该:transaction策略需要更多工作

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

其他值得一读

于 2015-06-21T12:23:38.550 回答