2009-07-21 96 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