2009-05-29 7 views
10

私は、各タスクは、フォームで定義されているなど、私の仕様の一部としてテストしたいどのRakefileですくい一連のタスクを持っている:環境タスクのActiveRecordを設定します:タスク:rakeタスクをテストするtest_helper.rbの環境を上書きすることはできますか?

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

/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 

助けをだから、私の要求 - それは可能であるためにくつがえす:私のtest_helper.rbファイルの環境タスクは、私、私のすくいテストは、私のテストデータベースではなく、生産と対話しますか?私はヘルパーファイルでタスクを再定義しようとしましたが、これはうまくいきません。

私は過去1週間これに固執していたので、解決策についての助力は素晴らしいことでしょう。

答えて

8

同様の問題に対する私の "解決策"は、.rakeファイルからすべてのロジックを抽出し、タスクを実行するためのクラスを作成し、レイクファイルに1行の呼び出しだけを残してテストしたあまりにもハード。クラスはそれからかなり正常にテストできます。

これは、広範囲の状態を維持する複雑な相互依存性のあるタスクにどの程度うまく立ち向かうかわかりません。おそらくうまくいきませんが、他の設計上の問題の可能性が高いでしょう。 ..

私はもっと良いものを逃したかどうかを知りたいです。

EDIT:以前は(a)が同じことを言い、(b)がそれをより良く言うブログ投稿hereがありました。彼が最初に言ったように見える。

+0

RSpecの感謝を使用して、私のすくいタスクをテストするためにそれを使用します。私は平均的な時間にRakeをもっと使いこなしました。そして、私はtest_helper.rbのこれらの2つのメソッドが解決策に向かうかもしれないと思います。 DEF rake_up Rake.application =レーキ:: Application.new 熊手:: Task.define_task:そのブログ記事への環境 Rake.application エンド デフrake_down Rake.application = nilの エンド –

+0

リンクが表示されます。死んでいる私が内容を見つけることができる唯一の場所はここです:[Rakeのタスクに入れるもの](http://www.artima.com/forums//threaded.jsp?forum=123&thread=251328) – ThomasW

0

あなたがテスト環境を実行しているときに読み込まれているのはテストです。

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

私はtest_helper.rb

1

であなたのrakeタスクを無効にする理由を参照してくださいいけないので、私はあなたがこの行を探していると思う: は(File.join(RAILS_ROOT、「設定」、「環境」が必要です)) それはあなたがで見つけるまさにだ「タスク:環境」実装

私はあなたの答えマイク用

関連する問題