MiniTest,Capybara,Fixture,Database_Cleaner第二次不通过

时间:2015-06-20 14:48:03

标签: ruby-on-rails capybara 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

当我使用硒和铬时,我可以看到销售的ID。我注意到后续测试的ID是相同的。即980190963

我的理论是

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

  2. visit未创建新的@sale(如我所说的here虽然我使用minitest)因为#sal_payment_btn未呈现(销售已经payment在第一次运行)。

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

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

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

    我做错了什么,在哪里?

    P.S。我使用以下宝石

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

    我已阅读以下内容

1 个答案:

答案 0 :(得分:3)

我已确认问题出在database_cleaner上。

短版

:transaction策略无法用于我的设置cucumber + webkit / selenium。已更改为:deletion策略。

我学到了什么

似乎我没有足够的学习。我在寻找答案时发现了以下内容。

  1. 有人问Why is the database cleaner transaction strategy not working with Cucumber and Selenium? - 没有回答

  2. How to set up database_cleaner for Rails with Cucumber and RSpec表示

      

    :transaction策略不适用于Selenium

  3. database_cleaner readme表示:transaction策略更加有效

      

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

  4. 其他有价值的阅读