すくいタスクをテストするためにtest_helper.rb環境:私は、タスクを無効にすることはできますか?
質問
私は私が各タスクがフォームで定義されているなど、私の仕様の一部としてテストしたいRakefileですくい一連のタスクがあります:
task :do_somthing => :environment do
# Do something with the database here
end
:環境タスクは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
の助けだから、私の要求 - それは可能であるためにくつがえす:環境タスク私のtest_helper.rbファイル内ので、私は私の熊手のテストは、私のテストデータベースではなく、生産と対話?私はヘルパーファイルでタスクを再定義しようとしたが、これは動作しません。
私は先週、この上で立ち往生してきたように、溶液のためのすべてのヘルプは、素晴らしいことだ。
解決
同様の問題への私の「ソリューションは、」私もテストしないで自信を持って感じたすくいファイルにちょうど1ラインコールを残して、私の.rakeファイルからすべてのロジックを抽出し、タスクを実行するためのクラスを作成することでしたハード。クラスは、ほとんど正常にテストすることができます。
私は、これは、いくつかの遠大な状態を維持し、相互に依存するタスクの複雑なセットに立つだろうどれだけ知っていない:おそらくないだけでなく、しかし、その後、再びそれは最も可能性の高い他のいくつかの設計上の問題の兆候だろう。..ます。
私はもっと良いものを見逃しているかどうかを確認するために興味があります。
EDIT:ブログ記事がありました<のhref = "http://blog.innerewut.de/2009/3/2/what-to-put-into-rake-tasks" のrel = "noreferrer" >ここで(a)は同じことを言うと、(b)の方が良いと言うことを。彼はあまりにも、それを最初に言ったように見えます。
他のヒント
私はあなたがこの行を探していると思います: 必要(File.join(RAILS_ROOT、 '設定'、 '環境')) それはあなたがで見つけるまさにだ「タスク:環境」の実装
私はRSpecのを使用して、私のすくいタスクをテストするためにそれを使用する
はロードされていることがテストされます。
あなたがテストと対話しているように、 データベースだけます。
だから私は、
test_helper.rbであなたのrakeタスクを無効にする理由を参照してくださいいけません