2012-10-02 17 views
16

rakeタスクをテストしようとしていて、その中にアクティブなレコードを使用しています。Rails with Rails with Rails環境をテストする

私は、このスペック rspec spec/lib/survey_spec.rbを実行すると、私は "このエラーが出る
require 'spec_helper' 
require 'rake' 

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') 

describe "survey rake tasks" do 
    describe "survey:send_report" do 
    it "should send a report" do 
     Rake::Task['survey:send_report'].invoke 
    end 
    end 
end 

RuntimeError: 
    Don't know how to build task 'environment' 

はどのようにロードします:?的環境:例の仕様により、内部的環境タスクを

+0

このガイドでは、それが役立つことのようになります。http://www.philsergi.com/2009/02/testing-rake-あなたの前に次の行を追加することで、これをスタブアウトすることができますtasks-with-rspec.html –

答えて

1

追加あなたの仕事ですそれ以前に行うべきことは?あなたの.rakeファイルには次のようなものがあります:

namespace :survey do 
# ... 

task :send_report => :enviroment do 
# ... stuff 
end 

これは、そのタスクを実行するために完全な環境をロードする必要があるためです。あなたは、私は、問題があなたのsurvey:send_reportタスクが:environmentに依存していますが、:environmentタスクを定義するファイルをロードしていないということである疑いがあるより多くの情報http://railscasts.com/episodes/66-custom-rake-tasks

8

を取得するには、このrailcastを確認することができます。それはレールのどこかにあり、あなたのメインのRakefileがそれをロードします。

だから、私はあなたが

load File.join(Rails.root, 'Rakefile') 

load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') 

を変更した場合、それがうまくいくと思います。

require 'rake' 
MyRailsApp::Application.load_tasks 

して、あなたのタスクを呼び出します:

30

私はあなたが最初のタスクをロードすべきだと思うあなたのテイクタスクがロードされるようにRailsの環境を必要とするかもしれないよう

Rake::Task['survey:send_report'].invoke 
+1

「MyRailsApp」とは何ですか? –

+1

@ZackXuそれはあなたのアプリケーションの名前です、あなたは 'config/application.rb'でそれを見ることができます – Davidslv

6

が鳴ります。 (:すべての)フック:

Rake::Task.define_task(:environment)