如何在不丢弃DB内容的情况下运行Rails集成测试?

在推送到生产之前,我已经编写了一些集成测试,我想在我的prod数据库副本上运行。 这让我测试我的所有路线仍然是正确的,所有页面都呈现没有错误,一些多页工作流程按预期工作。

当我运行集成测试时,它会丢弃我加载的数据库并加载测试夹具(如预期的那样)。 如何更改此行为并保留我的生产数据库的副本?

集成测试调用db:test:prepare调用db:test:clone_structure调用db:structure:dump和db:test:purge

你可以编写自己的任务

namespace :your_namespace do Rake::TestTask.new(:integration => "db:migrate(if you want") do |t| t.libs << "test" t.pattern = 'test/integration/**/*_test.rb' t.verbose = true end end 

为了实现这一点,我必须在调用rake任务时指定环境,否则它将在开发db上运行迁移,然后在测试db上运行测试; 给出上面的例子

 namespace :dbtest do Rake::TestTask.new(:integration => "db:migrate") do |t| ... 

我不得不像这样执行测试

 rake environment RAILS_ENV=test dbtest:integration 

如果您不希望在每次执行测试之间重新加载生产副本,那么在集成测试中设置self.use_transactional_fixtures = true也会很有用。

否则,集成测试运行将使数据随之发生变化。

我需要添加aivarsak的Rake任务

 namespace :dbtest do Rake::TestTask.new(:integration) do |t| t.libs << "test" t.pattern = 'test/integration/**/*_test.rb' t.verbose = true end end 

并删除

 fixtures :all 

test / test_helper.rb文件中的行(或者在集成测试文件中创建一个新引用的文件)