2009-07-08 21 views
10

Rakeを実行するたびにdb:test:prepareというタスクが呼び出され、schema.rbとmigrationsからテスト環境データベースが再構築されます。 db:testの呼び出しを無効にするには、Railsアプリケーションをテストするときに準備する必要があります。 Railsの宝石を変更しなくても可能ですか?Rakeテストがタスクdb:test:prepareを呼び出すのを防ぐ方法

答えて

13

私の周り見てきたソリューションです:あなたのRakefileで

Rake::TaskManager.class_eval do 
    def remove_task(task_name) 
    @tasks.delete(task_name.to_s) 
    end 
end 

lib/tasks/db/test.rakeで:

Rake.application.remove_task 'db:test:prepare' 

namespace :db do 
    namespace :test do 
    task :prepare do |t| 
     # rewrite the task to not do anything you don't want 
    end 
    end 
end 
+1

私はこれが好きです。これにより、プラグインをインストールする必要はなく、うまく動作します。しかし、将来私はprepareメソッドを使いたいのですか? Rakeランニングキューからのみ削除することは可能ですか? –

+0

その場合、 'test:units'、' test:functionals'、 'test:integration'を書き直して' db:test:prepareから継承しないようにする必要があるでしょう'タスク。 – mckeed

+0

実は、私はこれをテストしていませんが、あなたはおそらくに 'remove_task'を変更することができます: 'デフrename_task(タスク名、new_task_name) @tasks [new_task_name] = @ tasks.delete(タスク名) end' あなたをテストタスクがまだそれを実行するので、 'db:test:prepare'を書き直さなければなりません。 – mckeed

5

override_rake_taskのためにこれを処理するプラグインがあります。ここで

namespace :db do 
    namespace :test do 
    override_task :prepare do; end 
    end 
end 
0

いくつかのためにここでは簡単な使用例です古いバージョンのレール - Rake::Task['db:test:prepare'].clearをRakefileの最後に置くことができます

関連する問題