10

スペックなどの一部としてテストしたい一連のrakeタスクがRakefileにあります。各タスクは次の形式で定義されています。

task :do_somthing => :environment do
  # Do something with the database here
end

:environmentタスクがActiveRecord/DataMapperデータベース接続とクラスを設定する場所。これをRailsの一部として使用していませんが、BDDの一部として実行したい一連のテストがあります。

このスニペットは、私がどのようにレーキタスクをテストしようとしているのかを示しています。

def setup
  @rake = Rake::Application.new
  Rake.application = @rake
  load File.dirname(__FILE__) + '/../../tasks/do_something.rake'
end

should "import data" do
  @rake["do_something"].invoke
  assert something_in_the_database
end

だから私の助けの要求-私のrakeテストが本番ではなく私のテストデータベースと相互作用するように私のtest_helper.rbファイルの:environmentタスクをオーバーライドすることは可能ですか?ヘルパーファイルでタスクを再定義しようとしましたが、これは機能しません。

私はこの1週間これに固執しているので、解決策の助けは素晴らしいでしょう。

4

3 に答える 3

9

同様の問題に対する私の「解決策」は、.rake ファイルからすべてのロジックを抽出し、タスクを実行するクラスを作成して、rake ファイルに 1 行の呼び出しだけを残すことでした。その後、クラスはほぼ正常にテストできます。

これが、広範囲に及ぶ状態を維持する複雑な相互依存タスクのセットにどれだけ耐えられるかはわかりません。おそらくうまくいかないでしょうが、それはおそらく他の設計上の問題を示している可能性が高いです...

もっと良いものを見逃していないかどうか知りたいです。

編集: 以前は、(a) 同じことを言い、(b) より適切に言っているブログ投稿がここにありました。彼も最初に言ったようです。

于 2009-05-29T13:55:48.293 に答える
1

あなたはこの行を探していると思います:

rspecを使用してrakeタスクをテストするために使用します

于 2010-03-20T00:02:05.320 に答える
0

テスト環境を実行しているとき、ロードされているのはテストです。

したがって、テストデータベースのみと対話しています。

したがって、test_helper.rbでレーキタスクをオーバーライドする理由がわかりません

于 2009-06-11T18:13:30.130 に答える