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

时间:2009-01-11 21:17:17

标签: ruby-on-rails unit-testing integration-testing

我已经编写了一些集成测试,我想在推送到生产之前对我的prod数据库副本运行。这让我可以测试我的所有路线是否仍然正确,所有页面都可以正常渲染,而且一些多页工作流程可以按预期工作。

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

4 个答案:

答案 0 :(得分:2)

集成测试调用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

答案 1 :(得分:1)

要使其工作,我必须在调用rake任务时指定环境,否则它将在开发db上运行迁移,然后在测试db上运行测试;给出上面的例子

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

我必须像这样执行测试

rake environment RAILS_ENV=test dbtest:integration

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我需要添加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文件的行(或者创建一个在集成测试文件中引用的新文件)