11

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

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

4

4 回答 4

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
于 2009-01-11T21:48:11.757 回答
1

为了让它工作,我必须在调用 rake 任务时指定环境,否则它将在开发数据库上运行迁移,然后在测试数据库上运行测试;给出上面的例子

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

我不得不像这样执行测试

rake environment RAILS_ENV=test dbtest:integration
于 2009-08-28T14:23:47.220 回答
0

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

否则,集成测试运行将使用它所做的任何更改来破坏数据。

于 2009-01-11T21:53:19.217 回答
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 文件中的行(或创建一个您在集成测试文件中引用的新文件)

于 2009-01-13T03:37:54.170 回答