How do I run Rails integration tests without dropping DB contents?

帅比萌擦擦* 提交于 2019-11-30 12:18:54

Integration tests calls db:test:prepare which calls db:test:clone_structure which calls db:structure:dump and db:test:purge

You can write your own task

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

To get this to work I had to specifiy the environment when calling the rake task, otherwise it would run the migrations on the development db and then run the tests on the test db; given the example from above

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

I had to execute the tests like so

rake environment RAILS_ENV=test dbtest:integration

Setting self.use_transactional_fixtures = true in your integration tests would be useful as well if you don't want to have to reload the production copy between each execution of the test.

Otherwise, the integration test run will splat the data with whatever changes it makes.

I needed to add aivarsak's Rake task

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

and also remove the

fixtures :all

line from the test/test_helper.rb file (or create a new one you reference in your integration test files)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!