2011-08-01 18 views
47

मैं एक एकीकरण परीक्षण सूट का निर्माण कर रहा हूं और इसमें एक तर्क है कि मुझे एक साफ डेटाबेस होना चाहिए। मैं अपने परीक्षणों में से एक के अंदर db:test:purge कार्य कैसे चला सकता हूं?रुपेक टेस्ट में रेक रेक कार्य

मैं उपयोग कर रहा हूँ: माणिक 1.9.2, 3.0.9 रेल, rspec 2.6

+0

ही RSpec के बिना: http://stackoverflow.com/questions/3530/how-do-i-rake-tasks-within -ए-रूबी-स्क्रिप्ट –

उत्तर

51

आप रैक कार्यों आह्वान कर सकते हैं के रूप में निम्नलिखित:

require 'rake' 
Rake::Task[name].invoke 

इस मामले इस निम्न कोड में परिणाम होगा में:

require 'rake' 
Rake::Task['db:test:purge'].invoke 
+0

उसने ऐसा किया। धन्यवाद। मेरे पास भी गलत काम का नाम था, जो मुझे पहले फेंक रहा था। रेल 3 में, रेक टेस्ट: तैयार – xentek

+1

@jim अच्छा बिंदु करने के लिए तैयार लग रहा था। आप उन उदाहरणों में Rake::Task[name].execute का उपयोग कर सकते हैं, लेकिन आपको यह सुनिश्चित करना होगा कि आप इसकी किसी भी निर्भरता (उदा। ': पर्यावरण') को संतुष्ट करें क्योंकि इस विधि के साथ कार्य को कॉल करते समय वे नहीं चलते हैं। – xentek

+0

यह सहायक था। कार्य में पैरामीटर कैसे पास करते हैं ऊपर दिए गए उदाहरण देते हैं? – n8gard

32

स्वीकृत जवाब है, मेरे लिए काम नहीं था, जब मैं अपने खुद के रेक कार्य निष्पादित करने के लिए आवश्यक

यहाँ मेरी समाधान कल्पना फ़ाइल

require 'rake' 

प्लेस इन पंक्तियों जहां आप अपने कस्टम रेक कार्य निष्पादित करने के लिए की जरूरत है, उदाहरण के लिए के शीर्ष में

रखा है रेक फ़ाइल से update_data example.rake

load File.expand_path("../../../lib/tasks/example.rake", __FILE__) 
# make sure you set correct relative path 
Rake::Task.define_task(:environment) 
Rake::Task["update_data"].invoke 

मेरे पर्यावरण:

rails (4.0.0) 
ruby (2.0.0p195) 
rspec-core (2.14.7) 
rspec-expectations (2.14.3) 
rspec-mocks (2.14.4) 
rspec (2.14.1) 
rspec-rails (2.14.0) 
+1

हैई' को कॉल करके आवश्यक होगा, इसके बजाय मैंने _Rails.application.load_tasks_ का उपयोग किया है, नीचे 'रेक' की आवश्यकता है। क्या यह एक अच्छा समाधान है? – coderVishal

+0

'रेक :: टास्क.डेफिन_टास्क (: पर्यावरण) 'से बचने में जीत के लिए' रनटाइम त्रुटि: कार्य 'पर्यावरण' (देखें - टास्क) कैसे बनाएं, ' – s2t2

+3

मैं उपयोग कर रहा हूं:' रेक। एप्प्लिकेशन। 'Rails.application 'के साथ उन सभी को लोड करने के बजाय, परीक्षण किए जाने वाले विशिष्ट कार्य को लोड करने के लिए rakes_require" कार्य/कार्य-नाम "'। load_tasks' (रेल 5, रुपेक 3.5) – Steve

9

हम

require "rake" 
Rails.application.load_tasks 

तब जोड़ सकते हैं हम कई रेक कार्यों का उपयोग करने की आवश्यकता होती है, तो बस फोन कोई काम

Rake::Task['sync:process_companies'].invoke 

हालांकि मैं अगर इसकी धीमी है क्योंकि यह सभी कार्य लोड करता है नहीं कर सकते इस बात की पुष्टि

संबंधित मुद्दे