2011-12-14 11 views
40

तो रेल 3.1 एक छोटे से ज्ञात काम "रेल जी प्लगइन नया" जनरेटर के साथ आता है, जो आपको रेल रत्न प्लगइन के लिए उपयुक्त कंकाल प्रदान करता है। [http://guides.rubyonrails.org/plugins.html#or-generate-a-gemified-plugin]रेल 3.1 प्लगइन मणि, डमी टेस्ट ऐप, rspec

यह उपयोगी चीजों में से एक है, जो टेस्ट :: यूनिट के साथ परीक्षण के लिए आसानी से चीजों को सेट करता है। यह आपको एक बुनियादी डमी रेल ऐप देता है कि आपके परीक्षण 'इंजन' व्यवहार का परीक्षण करने के संदर्भ में चल सकते हैं जो केवल रेल ऐप की प्रतिलिपि में कार्य करता है। (यह इसे ./test/dummy में डालता है)। लेकिन आपके परीक्षण अभी भी my_gem/test में हैं, परीक्षण 'डमी ऐप में नहीं रहते हैं। और my_gem/test/test_helper.rb वहां लिखा गया है, ऐसे परीक्षणों को डमी ऐप के संदर्भ में चलाया जाएगा, जो ../dummy/config/environment पर बूट किया गया है।

मैं इसका वर्णन करता हूं क्योंकि मुझे लगता है कि बहुत से लोग इस नए जनरेटर के बारे में नहीं जानते हैं, जो चीजों को इतनी अच्छी तरह से सेट करता है।

लेकिन मेरा सवाल यह है कि, क्या किसी ने यह पता लगाया है कि इसके बजाय आरएसपीईसी के साथ ऐसा कैसे किया जाए? मैंने रेलवे प्लगइन मणि में rspec के लिए चीजों को सेट करने के लिए DIY के समान सिद्धांतों का पालन करने का प्रयास किया है, लेकिन मैं विभिन्न भ्रमित रोडब्लॉक्स में दौड़ रहा हूं, और उम्मीद कर रहा हूं कि किसी और ने इसे पहले ही समझ लिया है (या इसे समझने में रुचि होगी हममें से बाकी के लिए बाहर, हे)।

उत्तर

93

परीक्षण इकाई के बिना प्लगइन बनाएँ और डमी आवेदन के लिए पथ निर्दिष्ट:

rails plugin new foobar --skip-test-unit --dummy-path=spec/dummy 

rspec-रेल gemspec फाइल करने के लिए एक विकास निर्भरता के रूप में जोड़ें (foobar.gemspec):

Gem::Specification.new do |s| 
    . 
    . 
    . 
    s.add_development_dependency "rspec-rails" 
end 

रन bundle install

डमी ऐप से प्लगइन स्पेक निर्देशिका में एक सिम्लिंक बनाएं और रुपेक इंस्टॉल जेनरेटर चलाएं:

cd spec/dummy 
ln -s ../../spec 
rails generate rspec:install 
cd - 

अब spec/spec_helper.rb संपादित (या spec/rails_helper.rb रेल में 4+, पुराने संस्करणों के बारे में निश्चित नहीं) इस लाइन को बदलने (पंक्ति 3):

require File.expand_path("../../config/environment", __FILE__) 
इस के लिए

:

require File.expand_path("../dummy/config/environment", __FILE__) 

अब आप अपनी प्लगइन की जड़ से रुपेक चला सकते हैं और यह डमी एप्लिकेशन से भी चश्मा उठाएगा।

bundle exec rspec spec 

मैं और अधिक विस्तार में इस बारे में लिखा था, दिखा भी एक रेल में capybara, Spork और गार्ड स्थापित करने के लिए कैसे एक डमी आवेदन के साथ प्लगइन: rspec --init के लिए

https://web.archive.org/web/20130125091106/http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec

+5

के मुकाबले बहुत आसान है, मेरे लिए, लाइन: 'फ़ाइल.एक्सपैंड_पैथ ("../../ config/environment", __FILE __) की आवश्यकता है ' ' spec/'spec/spec_helper.rb' के बजाय rails_helper.rb'। क्या यह रुपयेपेक में बदलाव के कारण है? – J3RN

+0

यदि आप spec के अंदर डमी फ़ोल्डर रखेंगे/तो rspec आपकी spec फ़ाइलों को दो बार मिलेगा। मणि के लिए पहली बार, रेल ऐप के लिए दूसरी बार, चूंकि पटर वहां सभी spec फ़ाइलों से मेल खाएगा, भले ही वे सिम्लिंक के अधीन हों या नहीं। [- बहिष्कार-पैटर्न] (https://relishapp.com/rspec/rspec-core/v/3-3/docs/configuration/exclude-pattern) केवल --pattern के साथ मिलकर काम करता है। 'config.pattern << ',! Spec/dummy'' और समान रूप से काम नहीं करते हैं इस मामले को ठीक करने वाला एकमात्र समाधान है spec फ़ोल्डर – Max

+0

के बाहर डमी फ़ोल्डर होना tumblr का लिंक लेख वास्तव में टूटा हुआ है ... @ नाथन-अमीक ने इसे कहीं और अपलोड किया? – opsidao

20

बस rails plugin new <gemname> चलाएं और फिर rspec को gemspec फ़ाइल में development_dependency के रूप में जोड़ें, और इसे rspec --init इंस्टॉल करें।

अब spec को test से डमी उप फ़ोल्डर ले जाने और spec_helper में इन्हें जोड़ने:

ENV["RAILS_ENV"] = "test" 

require File.expand_path("../dummy/config/environment.rb", __FILE__) 
require "rails/test_help" 
require '<gemname>' 

Rails.backtrace_cleaner.remove_silencers! 

के रूप में वे test_helper में हैं!

+1

+1 – fotanus

+3

यह मेरे लिए बहुत अच्छा काम करता है, अन्य उत्तर –

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