23

多くのカスタム Rake タスクに依存する ROR アプリを開発しています。

それらをテストする最良の方法は何ですか?

4

6 に答える 6

16

Rake タスクをテストするのは非常に困難です。最も簡単な解決策は、ロジックを適切なモデルのメソッドに移動することです。次に、それをテストして、rake タスクからメソッドを呼び出すだけです。

于 2009-08-10T14:35:15.553 に答える
16

何かのようなもの:

  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")
于 2011-03-14T23:52:07.507 に答える
4

これは別のSOの質問でかなりよくカバーされています

ここで要約して繰り返しますが、rake タスクをテストしようとしないことをお勧めします。テストするコードをクラス、モデル、または lib 関数に抽出し、そこでテストします。次に、 rake を使用して関数を呼び出し、依存関係を管理します。

于 2009-08-10T15:32:37.543 に答える
1

私はPivotalLabs のやり方が一番好きです。ただし、アプリで次のようにコードを一般化して変更しました。

# 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

また、my_rake_file.rake のコードの重労働をモジュールに抽出し、lib/ に保存しました。

于 2014-03-31T19:01:09.870 に答える