我在Rails 4上运行多个集成测试时遇到困难(现在称为Rails 5中的系统测试)。
环境:在Puma服务器上运行Rails 4 / Minitest / Capybara / Poltergeist。
当我运行一个创建新记录的测试时,每次都有效。
RAILS_ENV="test" ruby -I test test/integration/requests_test.rb -n /create_new/
当我运行整套测试时,上面的测试每次都无法创建,因为该记录已经存在。
RAILS_ENV="test" ruby -I test test/integration/requests_test.rb
我通过在开始时添加puts Request.all.collect(&:name)
来确认这一点 - 在运行组时,已经在数据库中创建了记录。
这是核心问题 - 每次测试数据库都不可靠新鲜。 (对于我的单元测试和我的功能测试,在小组和个人中都是新鲜的。)我怎样才能确保我的集成测试每次都重新开始?
如果它有用,上面的命令似乎是在开发模式下运行Puma,即使我已经在ENV['RAILS_ENV'] = 'test'
中指定了test_helper.rb
。
答案 0 :(得分:0)
您是否检查过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