答えて
レーキタスクはかなりテストするのが難しいです。最も簡単な解決策は、ロジックを適切なモデルのメソッドに移動することです。それをテストし、レーキタスクからメソッドを呼び出すだけです。
これはかなりよく要約にここでは繰り返さanother SO question
私の推薦で覆われ、すくいタスクをテストしようとするではありません:クラス、モデルまたはLIB機能をテストするためのコードを抽出し、そこにそれをテストします。次に、rakeを使って関数を呼び出し、依存関係を管理してください。以下のような
何か:あなたのスペックで
def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end
:
execute_rake("tags.rake","tags:popular")
rake [task]。rake [tags] .invokeの代わりに.invoke – standup75
すばらしい答え。宝石のためにレーキ作業をテストするときに、そのロード物がトリックをしました。 –
これは悪い考えです。これは、あなたがテストを実行するためにレーキを使用する必要があるまで動作します。その場合、テストはゼロ以外の終了コードで自動的に失敗しますが、rspecはすべてのテストが成功したと報告します。 –
は、私が最もPivotalLabs' wayが好きです。私のアプリでは以下のようにしかし、私は自分のコードを一般化して修正:
# file: spec/tasks/my_rake_file_spec.rb
require 'spec_helper'
require 'rake'
describe 'my_rake_file.rake' do
before :all do
Rake.application.rake_require 'tasks/my_rake_file'
Rake::Task.define_task(:environment)
end
let(:run_rake_task) {
Rake::Task[task_name].reenable
Rake.application.invoke_task task_name
}
describe 'my_task_name' do
let(:task_name) { "my_task_name" }
it "creates 10 cars" do
run_rake_task
Car.count.should == 10
end
end
end
はまた、私は今、まあのlib/
に格納されたモジュールにmy_rake_file.rakeのコードの重労働を抽出しました宝石はそのためにあります:
Fantaskspec - https://github.com/crismali/fantaskspec
- 1. Crontabからのレイクタスク?
- 2. レイクタスク:エラー処理
- 3. Jenkinsのレイクタスクの問題
- 4. HerokuのSinatraコンテキストでのレイクタスク
- 5. レイクタスクの監視と制御
- 6. TomcatとJRubyでのレイクタスクの実行
- 7. レイクタスクがメールレールを送信しない
- 8. タスク内からのレイクタスクの説明へのアクセス
- 9. メモリ内のsqliteデータベースをバックアップするためのレイクタスク
- 10. 特定のレイクタスクのグループを無効にする
- 11. Rails 3.1.3上のレイクタスク - アプリケーションは既に初期化済み
- 12. レイクタスクを使用する際に永続性を維持する
- 13. レイクタスクが定義された後、そのレイクタスクに説明を追加するにはどうすればよいですか?
- 14. cron - 初期化されていない定数からのレイクタスクYAML :: ENGINE
- 15. Railsから外部レイクタスクを呼び出す:依存関係の問題
- 16. (Ruby on Rails)ブログの投稿を自動的に生成するレイクタスクを改善するには?
- 17. Python:Noneのテスト、ブール値のテスト
- 18. 両方のHTMLページの作成/テスト/テスト/テスト方法
- 19. sbtテストのみの特定のテスト
- 20. Zenphyrへのテスト結果のテスト
- 21. テスト完了7.0のD2009アプリケーションのテスト
- 22. ユニットデータアクセス層のテスト - 更新メソッドのテスト?
- 23. AndroidスタジオJUnitテストのFiresbaseでのテスト
- 24. 継続テストでのUIテストの使用
- 25. Rails rspecコントローラのテストとインテグレーションのテスト
- 26. UIでのMapViewテストXcodeでのテスト
- 27. Node.jsプログラミングワークフロー - テスト、コード、テスト
- 28. UI/GUIテスト、機能テスト、E2Eテストの違いは何ですか?
- 29. Mavenのテスト/ resourcesディレクトリと統合テスト
- 30. テスト内のUIテスト機能クラス
私は、これはまともな提案だと思うが、それは質問に答えていません。データにバッチスクリプトなどを実行するためにモデルを汚染する必要はありません。 –
私はここに良い答えがあります:http://stackoverflow.com/a/926100/94120 –