परीक्षण वातावरण में रेल्स कंसोल को कैसे चलाएं और test_helper.rb को लोड करें?


121

पृष्ठभूमि: मुझे थॉटबॉट की "फ़ैक्ट्री गर्ल" मणि के साथ कुछ समस्याएं हैं, यूनिट और अन्य परीक्षणों में उपयोग करने के लिए ऑब्जेक्ट बनाने के लिए उपयोग किया जाता है। मुझे सांत्वना देने और अलग-अलग फैक्टरी गर्ल कॉल चलाने की ज़रूरत है ताकि यह पता चल सके कि क्या हो रहा है। उदाहरण के लिए, मैं वहाँ जाना चाहते हैं ...

>> Factory(:user).inspect

मुझे पता है कि आप विभिन्न वातावरणों में कंसोल चला सकते हैं ...

$ स्क्रिप्ट / कंसोल RAILS_ENV = परीक्षण

लेकिन जब मैं ऐसा करता हूं, तो फैक्टरी वर्ग उपलब्ध नहीं होता है। ऐसा लग रहा है जैसे कि test_helper.rbलोड नहीं हो रहा है।

मैंने विभिन्न requireकॉलों की कोशिश की, जिनमें से एक पूर्ण पथ के साथ है, test_helper.rbलेकिन वे इसके समान विफल हैं:

$ script/console RAILS_ENV=test
>> require '/Users/ethan/project/contactdb/test/test_helper.rb'
  Errno::ENOENT: No such file or directory - 
  /Users/ethan/project/contactdb/config/environments/RAILS_ENV=test.rb

Grr। अरे।


1
नतीजतन यदि आपने स्क्रिप्ट / कंसोल से पहले RIDS_ENV = परीक्षण रखा था, तो यह उस तरह से काम करेगा जैसा आप उम्मीद करेंगे।
जारेड

जवाबों:


192

रेल के लिए <3.0

भागो script/console --help। आप देखेंगे कि सिंटैक्स है script/console [environment], जो आपके मामले में है script/console test

मुझे यकीन नहीं है कि आपको परीक्षण सहायक की आवश्यकता है या यदि परीक्षण का वातावरण आपके लिए है, लेकिन उस आदेश के साथ आपको कम से कम सफलतापूर्वक परीक्षण एनवी में बूट करने में सक्षम होना चाहिए।

एक विचार के रूप में: यह वास्तव में अजीब है कि स्क्रिप्ट में विभिन्न बायनेरिज़ / रेल वातावरण सेट करने के विभिन्न तरीके हैं।

रेल 3 और 4 के लिए

भागो rails c testbundle execयदि आपको वर्तमान एप्लिकेशन परिवेश के लिए इसकी आवश्यकता है तो Prepend करें ।

रेल्स 5 और 6 के लिए

भागो rails console -e test


63
रेल 3 में, यह बस हैrails console [environment]
इदरीस मोख्तारज़ादा

26
आपके द्वारा टाइप किए जाने वाले सर्वर को शुरू करने के कारण यह थोड़ा असंगत हैrails server -e test
जेसन

रेल 5 में यह अभी भी काम करता है। और, आपको अपने वातावरण के कम से कम कुछ हिस्सों को लोड करने की आवश्यकता है - मेरे मामले features/support/helpers.rbमें स्वचालित रूप से लोड नहीं किया गया था। इसके अलावा, Rack::Testलोड नहीं है।
डेरेल ड्यूरेट

61

रेल 3 में, बस करो rails console testया rails console productionया rails console development(जो डिफ़ॉल्ट है)।



8

रेल के लिए 5.2.0: "पर्यावरण के नाम को एक नियमित तर्क के रूप में पास करना पदावनत कर दिया जाता है और अगले रेल संस्करण में हटा दिया जाएगा। कृपया, इसके बजाय -e विकल्प का उपयोग करें।"

rails c -e test

4

आप उस वातावरण को निर्दिष्ट कर सकते हैं जिसमें कंसोल कमांड संचालित होनी चाहिए।

rails c [environment]

उदाहरण

1) मंचन के लिए

rails c staging

2) उत्पादन के लिए

rails c production

स्रोत और विस्तृत विवरण के लिए: रेल कमांड लाइन


3

डेविड स्मिथ सही है, बस करो

script/console test

हेल्प कमांड दिखाएगा कि यह क्यों काम करता है:

$ script/console -h
Usage: console [environment] [options]
    -s, --sandbox                    Rollback database modifications on exit.
        --irb=[irb]                  Invoke a different irb.
        --debugger                   Enable ruby-debugging for the console.

यह [पर्यावरण] बिट है।


2

मैं पूछने वाले के दर्द को साझा करता हूं। यहां वास्तव में तीन अलग-अलग प्रश्न हैं, जिनमें से कुछ संबोधित हैं, कुछ नहीं:

  1. आप परीक्षण वातावरण में कंसोल कैसे शुरू करते हैं?

    हाल के रेल संस्करणों के लिए bundle exec rails c test, या उसके लिए वैकल्पिक वाक्यविन्यास।

  2. आप यह कैसे सुनिश्चित करते हैं कि परीक्षण / test_helper.rb उस कंसोल सत्र में लोड है?

    कुछ ऐसा require './test/test_helper'करना चाहिए।

    मेरे लिए, यह सच है, यह दर्शाता है कि कंसोल शुरू होने पर यह पहले से लोड नहीं था। यदि वह कथन गलत है, तो आपने अभी कुछ कीस्ट्रोक्स बर्बाद किए हैं, लेकिन आप अभी भी जाने के लिए अच्छे हैं।

  3. एक बार जब test_helper लोड हो जाता है, तो आप इसमें बताए गए तरीकों को कैसे कहते हैं?

    एक सामान्य test_helper में, कस्टम विधियों को आमतौर पर ActiveSupport :: TestCase के उदाहरण तरीकों के रूप में परिभाषित किया जाता है। इसलिए यदि आप उनमें से किसी एक को कॉल करना चाहते हैं, तो आपको उस वर्ग की एक आवृत्ति की आवश्यकता है। परीक्षण और त्रुटि से, ActiveSupport :: TestCase.new में एक आवश्यक पैरामीटर है, इसलिए ... इसे कुछ पास करें।

    यदि आपके test_helper में create_user नामक एक विधि है, तो आप इसे इस तरह से लागू कर सकते हैं: ActiveSupport::TestCase.new("no idea what this is for").create_user


परीक्षण या त्रुटि के बजाय - रेल एपीआई गाइड का उपयोग करें यह खोजने के लिए कि इसे क्या चाहिए। api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... यह संभवत: परीक्षण का आदेश है जो :randomडिफ़ॉल्ट रूप से है
Mirv -

ActiveSupport :: TestCase के लिए वर्णित केवल उन दो वर्ग विधियाँ हैं, इसलिए मैं इस बात पर स्पष्ट नहीं हूँ कि यह किस वर्ग / मॉड्यूल initializeसे इसकी विधि विरासत में मिली है। लेकिन ऐसा लगता है कि पैरामीटर यह अपेक्षा करता @NAMEहै कि बनाई गई वस्तु पर संग्रहीत हो ।
निक डेविस

1

सुनिश्चित करें कि आपने GEM स्थापित किया है और आपने निम्न पंक्ति को या तो अपने परिवेश में जोड़ा है ।rb या test.rb फ़ाइल।

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"

0

टेस्ट एनव

rails console test # or just rails c test

डिवेलपमेंट एनव

rails console # or just rails c

0

रेल कंसोल कंसोल पर्यावरण चलाने के लिए कमांड है

rails c -e test

या

RAILS_ENV=test rails c

यदि आप कुछ समस्या का सामना कर रहे हैं

ActiveRecord::StatementInvalid:
   Mysql2::Error: Table 'DB_test.users' doesn't exist: SHOW FULL FIELDS FROM `users`

फिर आपको पहले अपना परीक्षण डीबी चलाकर तैयार करना चाहिए

bundle exec rake db:test:prepare
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.