2009-07-21 7 views
4

テストを実行するたびに。 Railsはテーブルから自分のデータを削除します。検索パフォーマンスと矯正をテストするために私のテーブルには何百万もの記録があります。私はテストを実行するたびにデータを追加することはできません。レールでテストを実行するとデータを保持する方法

「テストを実行すると、このテーブルのデータは削除しないでください。

ps。

は、私は私の問題へのリンク

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

それは多分関係だが見つかりましたが、私のレールプロジェクトに彼のコードを配置する場所を私は知りません。

答えて

7

しかし、neokainの以前の記事と非常によく似ていますが、彼は私にとってRails 3では動作しませんでした。 Railsの4では

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

Ah heck。私はrake specがこれをしたことを忘れていました...他のgooglerにとって、これはまた、rake specを実行しているときにdatabase_cleanerも使用していました。それは、私が適切にDBクリーナーでマスクしていたと思った種のデータを吹き飛ばしていたので、ITがそれを吹き飛ばすことはありませんでした。しかし、この方法は素晴らしいです。時には "レールが役立っている"というのは、レールの痛みです... –

1

"rake test"タスクは、常にデータベースを再作成するdb:test:prepareを実行します。

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

をそしてNO_DB=1 rake testを実行します。

あなたは/ libにタスクにこのどこかを追加することができます。また、RAKEタスクの代わりに自動テストを使用する場合、DBは変更されません。

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

私はで終わる: 私は先に行って、アプリのルートに私のRakefileにこれを落とし、私がテストを実行すると:単位、それは離れて私の既存のテーブルの全てを爆破しません。続く

# 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 
関連する問題