1

テストが実行される前にテスト データベースをクリアするためのレーキ タスク db:test:prepare があります。これは、いくつかのコア ライブラリの一部として定義されている test、test:units、および test:functionals タスクの魔法のような依存関係のようです。

test:units または test:functionals のいずれかを単独で実行すると、最初に db:test:prepare が実行され、テストが成功します。しかし、デフォルトのテスト タスクを実行すると、その間にデータベースがリセットされなかったため、2 番目のテスト スイートは失敗します。

調べてみると、rake の依存関係が既に 1 回実行されている場合はスキップされることtask :a => :preがわかりましたtask :b => :pretask :c => [:a, :b]rake c:pre, :a, :b:pre, :a, :pre, :c

最終的に、新しいタスクを作成することで、必要な動作が得られました。

namespace :test do
  task :all do
     Rake::Task['test:units'].invoke
     Rake::Task['db:test:prepare'].execute
     Rake::Task['test:functionals'].invoke
  end
end

これを行うより良い方法はありますか?または、依存関係が必要であることを宣言する方法などはありますか? Rake::Task には #reenable メソッドがあり、実行の最後に「prepare」タスク自体を再有効化して、それに依存する 2 番目のタスクが発生したときに再び呼び出されるようにするなど、回避策を可能にすることを望んでいました。 、しかし、そのようには機能しないようです。

4

0 に答える 0