【问题标题】:Rails Integration tests don't start freshRails 集成测试不会重新开始
【发布时间】:2017-10-17 14:51:54
【问题描述】:

我在 Rails 4 上运行多个集成测试(现在在 Rails 5 中称为系统测试)时遇到困难。

环境:在 Puma 服务器上运行的 Rails 4 / Minitest / Capybara / Poltergeist。

  1. 当我运行一个创建新记录的测试时,每次都有效

    RAILS_ENV="test" ruby -I test test/integration/requests_test.rb -n /create_new/
    
  2. 当我运行整个测试集时,上述测试每次都创建失败,因为记录已经存在。

    RAILS_ENV="test" ruby -I test test/integration/requests_test.rb
    

我通过在开始时添加 puts Request.all.collect(&:name) 来确认这一点 - 运行组时,已在数据库中创建记录。

这是核心问题 - 数据库并不是每次测试都可靠地更新。 (对于我的单元测试和功能测试,无论是分组还是个人,它都是新鲜的。)我如何确保我的集成测试每次都以全新的方式开始?

如果有帮助,上面的命令似乎在开发模式下运行 Puma,即使我在 test_helper.rb 中指定了 ENV['RAILS_ENV'] = 'test'

【问题讨论】:

    标签: ruby-on-rails-4 capybara integration-testing puma


    【解决方案1】:

    您是否检查过 database_cleaner gem (https://github.com/DatabaseCleaner/database_cleaner)?每次在 RailsHelper 配置中运行新的集成测试时,都可以使用它来清除数据库。我会查看他们的文档,但我的看起来像:

    DatabaseCleaner.strategy = :truncation
    
    RSpec.configure do |config|
     config.before(:each) do
      DatabaseCleaner.clean
     end
    
     config.after(:each) do
      FactoryGirl.reload #if you're using FactoryGirl
     end
    end
    

    【讨论】:

    • 请为此答案提供更多上下文。为什么它有效?也许提供一个代码示例。请参阅 guidelines 以创建一个好的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多