如何在rails中运行测试时保留数据

时间:2009-07-21 10:36:43

标签: ruby-on-rails testing

每次我都参加考试。 Rails将从表中删除我的数据。我的表中有数百万的记录用于测试搜索性能和纠正。我每次运行测试时都无法添加数据。

当我运行测试时,如何告诉rails“请不要删除此表中的数据”。

PS。

我找到了这个链接

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

这可能与我的问题有关,但我不知道将他的代码放在我的rails项目中。

4 个答案:

答案 0 :(得分:7)

与neokain上一篇文章非常相似,然而,他并没有为我的Rails 3工作。 我继续把它放到应用程序根目录下的Rakefile中,当我运行test:units时,它不会吹走我现有的所有表:

Rake::TaskManager.class_eval do
  def delete_task(task_name)
    @tasks.delete(task_name.to_s)
  end
  Rake.application.delete_task("db:test:purge")
  Rake.application.delete_task("db:test:prepare")
end

namespace :db do
  namespace :test do
    task :purge do
    end
    task :prepare do
    end
  end
end

答案 1 :(得分:2)

在Rails 4中,我最终得到了以下

# lib/tasts/test.rake
# Do not drop database for tests
if ENV['RAILS_ENV'] == 'test'
  Rake::TaskManager.class_eval do
    def delete_task(task_name)
      @tasks.delete(task_name.to_s)
    end
  end

  Rake.application.delete_task("db:test:load")

  namespace :db do
    namespace :test do
      task :load do
      end
    end
  end
end

答案 2 :(得分:1)

“rake test”任务总是运行db:test:prepare,它将重新创建数据库。

您可以在lib / tasks中添加它:

if ENV['NO_DB']
  namespace :db do
    namespace :test do
      task :prepare do
      end
    end
  end
end

然后运行NO_DB=1 rake test。此外,当您使用自动测试而不是rake任务时,DB将不会被更改。

答案 3 :(得分:1)

我尝试允许第一个答案但不起作用。

我搜索并找到了这个www.pervasivecode.com,我修改了第一个答案中的代码:

if ENV['NO_DB']
  Rake::TaskManager.class_eval do
    def delete_task(task_name)
      @tasks.delete(task_name.to_s)
    end
    Rake.application.delete_task("db:test:purge")
  end

  namespace :db do
   namespace :test do
    task :prepare do
    end
   end
  end
end

然后运行命令test允许第一个回答。数据库测试没有丢失。