Rails 集成测试不会重新开始

Rails Integration tests don't start fresh

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

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

  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) 来确认这一点 - 当 运行 加入组时,数据库中已经创建了记录。

这是核心问题 - 数据库并不是每次测试都可靠地新鲜。 (对于我的单元测试和功能测试,无论是在组中还是作为个人,它都是新鲜的。)我如何确保我的集成测试每次也都是新鲜的?

如果有用的话,上面的命令似乎是 运行ning Puma 在开发模式下,即使我在 test_helper.rb.

中指定了 ENV['RAILS_ENV'] = 'test'

您检查过 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