2009-07-21 74 views
4

每次运行测试时。 Rails将从表中删除我的数据。我在桌面上有百万条记录用于测试搜索性能和纠正。每次运行测试时我都不能添加数据。如何在轨道中运行测试时保留数据

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

ps。

我发现这个链接

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

它可能涉及到我的问题,但我不知道在哪里把他的代码在我的轨道项目。

回答

7

与neokain之前的帖子非常相似,但是他没有为我工作Rails 3。 我继续投进我的Rakefile这在应用程序的根,当我运行测试:单元,它并没有吹走我的所有现有表:

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 
+0

哎哟。我忘记了rake规范做到了这一点...对于其他googlers,在运行rake规范时也使用了database_cleaner。它吹走了我的种子数据,我认为我已经用db清理器正确屏蔽了,所以IT不会把它吹走。但是这种方法效果很好。有时候“铁轨有帮助”在铁轨中真的很痛苦...... – 2013-03-25 20:42:49

1

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

可以在LIB /任务添加这个地方:

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

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

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 

然后运行命令测试允许第一个答案。数据库测试不会丢失。

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