2012-10-02 46 views
16

我試圖測試一個rake任務,並且它使用一個活動記錄。使用Rspec與Rails環境測試Rake任務

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 

當我運行該規範rspec spec/lib/survey_spec.rb,我得到這個錯誤「

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 

這是因爲您需要加載完整的環境才能完成該任務。您可以檢查此railcast以獲取更多信息http://railscasts.com/episodes/66-custom-rake-tasks

8

我懷疑的問題是,你的任務survey:send_report取決於:environment但是你有沒有加載定義:environment任務的文件。這將在某個地方的軌道上,並且您的主要加載它Rakefile

所以,我認爲,如果你改變

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

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

它會工作。

30

我覺得你應該先裝任務:

require 'rake' 
MyRailsApp::Application.load_tasks 

,然後調用你的任務:

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

什麼是MyRailsApp? –

+1

@ZackXu這就是你的應用程序的名稱,你可以在'config/application.rb'中看到 – Davidslv

6

聽起來像你取的任務可能需要Rails環境被加載。 (:所有)掛鉤:

Rake::Task.define_task(:environment)