2009-10-10 15 views
9

rake test:units मेरे वर्तमान एप्लिकेशन में विफल रहता है, क्योंकि फिक्स्चर के आवश्यक डेटा गायब हैं।रेल यूनिट परीक्षण फिक्स्चर लोड नहीं करता

यदि मैं rake db:fixtures:load RAILS_ENV=test के माध्यम से मैन्युअल रूप से फिक्स्चर लोड कर रहा हूं तो इकाई परीक्षण काम कर रहे हैं, लेकिन रेक परीक्षण डेटाबेस को शुद्ध करता है।

मेरा test_helper में fixtures :all शामिल हैं और मेरे परीक्षण इसमें से विरासत में हैं - लेकिन फिक्स्चर बस लोड नहीं हो रहे हैं।

मैं इस समय अनजान हूं और वास्तव में कुछ मदद की ज़रूरत है!

धन्यवाद और अलविदा,

जो

संपादित करें: मैंने बहुत कोशिश की है और मुझे लगता है कि यह कुछ पर्यावरण सेटिंग्स या इस परियोजना में इस्तेमाल प्लगइन्स से कोई लेना देना नहीं है। क्या किसी को पता है कि परीक्षण पर्यावरण के लिए कौन सी फाइलें लोड की जाती हैं, इसके बारे में कहां पढ़ना है?

+1

इसके लायक होने के लिए, मैं एक समान समस्या में भाग गया, सिवाय इसके कि मैं डेटाबेस रिकॉर्ड पर निर्भर स्थिरता को परिभाषित कर रहा था। एक आवृत्ति चर और booya के लिए निरंतर इसे हटा दिया। ऐसा लगता है कि फिक्स्चर लोड होने से पहले स्थिरांक को परिभाषित किया जाता है। चीयर्स। –

उत्तर

3

मैं अंत में, समस्या का पता चला हालांकि समाधान तरह का hacky है।

एक प्लगइन यह भरोसा कर रहा है कि कम से कम एक पंक्ति डेटाबेस में कुछ डेटा है। तो क्या हुआ था:

  1. रेक लोड डेटाबेस स्कीमा
  2. रेक पर्यावरण लोड करने के लिए कोशिश करता है
  3. पर्यावरण प्लगइन
  4. प्लगइन लोड हो रहा है क्योंकि कम से कम एक लापता पंक्ति
  5. कोई जुड़नार
  6. लोड किए गए हैं की विफल रहता है शामिल

हैकी समाधान है: आवश्यक डेटा सीधे स्कीमा में रखें और एक फिक्स्चर में नहीं, क्योंकि यह देर से लोड हो गया है ।

मैं एक और सुविधाजनक समाधान की तलाश करूंगा और यदि मुझे कोई मिला तो यह जवाब अपडेट कर देगा।

+3

प्लगइन्स को इस तरह की चीजें नहीं करनी चाहिए। करने के लिए सबसे अच्छी बात प्लगइन को ठीक करना है और उन्हें जिथब पर एक पुल अनुरोध भेजना है। –

+0

मैंने प्लगइन के भीतर समस्या तय की है और जल्द ही एक पैच सबमिट करेगा। ;) – xijo

0

सुनिश्चित नहीं हैं कि अगर आप पहले से ही इस किया था, लेकिन परीक्षण डेटा डेटाबेस से YML फ़ाइलों के लिए परीक्षा/जुड़नार में तरह ar_fixtures

+0

हम्म, समस्या डेटाबेस में फिक्स्चर से डेटा प्राप्त करना है, मुझे लगता है कि ar_fixtures दूसरे तरीके से गोल करता है! :) – xijo

+0

ओह ओह :) क्षमा करें, प्रश्न को गलत तरीके से पढ़ें – Jen

5

एक प्लगइन का उपयोग कर fixtures :all के लिए अपने परीक्षण कक्षा में निर्यात कॉल रखो, नहीं सुपर कक्षा (test_helper)। मेरा अनुमान है कि सुपर क्लास का प्रारंभिक तरीका जिस तरह से आप उम्मीद कर रहे हैं उस पर काम नहीं कर रहा है और fixtures :all नहीं कहा जाता है। शायद test_helper की प्रारंभिक विधि में कॉल डालने का प्रयास करें।

मेरे test/test_helper.rb दिखता है इस तरह:

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
end 
+0

हाय सीस्टम्प, मैंने अपने परीक्षण वर्ग में सीधे 'फिक्स्चर: सभी' डालने की कोशिश की, लेकिन यह काम नहीं किया। ऐसा लगता है कि कॉल का कोई असर नहीं है - लेकिन मैं सिर्फ छवि क्यों नहीं कर सकता! – xijo

+0

+1: यह मेरे लिए काम करता है और मुझे यह समाधान पसंद है क्योंकि यह स्थानीय और स्पष्ट है। इस मामले में 'फिक्स्चर: उपयोगकर्ता' 'उपयोगकर्ता नियंत्रकटेस्ट 'के भीतर पर्याप्त होंगे। – Johnsyweb

5

एक और तरीका परीक्षण के लिए अपना खुद का कस्टम रेक कार्य लिखना है।

उदाहरण के लिए:


task :test_units do 

    RAILS_ENV = 'test' # Force the environment to test 

    puts "Recreate the test database" 
    Rake::Task['db:test:prepare'].invoke 

    puts "Seed the database with fixtures" 
    Rake::Task['db:fixtures:load'].invoke 

    puts "Executing Unit Tests" 
    Rake::Task['test:units'].prerequisites.clear 
    Rake::Task['test:units'].invoke 
end 

+0

यह मेरे लिए काम करता है, +1। केवल अंतर यह था कि मुझे 'डीबी: टेस्ट: तैयार' के बाद 'RAILS_ENV =' test'' 'रखना था, या फिर Sqlite3 एक त्रुटि के साथ विफल रहता है जिसमें कहा गया है कि मेरे पास परीक्षण डीबी को शुद्ध करने के लिए सही अनुमति नहीं है। –

0

मैं एक ही समस्या थी। या बल्कि, समस्या यह थी कि मेरे फिक्स्चर डेटाबेस स्कीमा के साथ चालू नहीं थे।अपवाद फेंकने के बजाय, रेलवे ने परीक्षण डेटाबेस को फ़ॉलबैक समाधान के रूप में उपयोग किया। सबसे iffy।

0

मेरी समस्या सिर पर "test_helper" की आवश्यकता है। उदाहरण के लिए।

require 'test_helper' 

class AdminUserTest < ActiveSupport::TestCase 
    # test "the truth" do 
    # assert true 
    # end 
end 
संबंधित मुद्दे