2012-10-02 12 views
16

मैं एक रेक कार्य का परीक्षण करने की कोशिश कर रहा हूं और इसमें एक सक्रिय रिकॉर्ड का उपयोग करता है।रेल पर्यावरण के साथ रुपेक के साथ रेकिंग कार्य

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- आप अपने से पहले करने के लिए इस लाइन जोड़कर इस बाहर ठूंठ कर सकते हैं कार्यों के साथ-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

अपने ले काम लोड करने के लिए रेल वातावरण की आवश्यकता हो सकती की तरह लगता है। (: सभी) हुक:

Rake::Task.define_task(:environment) 
संबंधित मुद्दे