2010-06-25 16 views
16

मैं 15 TDD steps to create a Rails application मार्गदर्शिका का पालन कर रहा हूं - लेकिन एक समस्या में भाग गया है जिसे मैं हल नहीं कर सकता।मोचा मॉक एक अन्य टेस्ट में ले जाता है

class WordsControllerTest < ActionController::TestCase 

    test "should get learn" do 
    get 'learn' 
    assert_response :success 
    end 

    test "learn passes a random word" do  
    some_word = Word.new 
    Word.expects(:random).returns(some_word) 
    get 'learn' 
    assert_equal some_word, assigns('word') 
    end 
end 

वर्ड वर्ग मैं निम्नलिखित कोड है में: WordsController के कार्यात्मक परीक्षण के लिए, मैं निम्नलिखित कोड है

class Word < ActiveRecord::Base 
    def self.random 
    all = Word.find :all 
    all[rand(all.size)] 
    end 
end 

जब मैं परीक्षण चलाने, मैं निम्न त्रुटि का अनुभव (संक्षिप्तता के लिए छोटा):

1) Failure: unexpected invocation: Word(...).random() satisfied expectations: 
- expected exactly once, already invoked once: Word(...).random() 

मैं अन्य बातों की एक भीड़ के साथ परीक्षण के आदेश को बदलने को बदलने की कोशिश की है, लेकिन बार-बार मैं एक ही ट प्राप्त करना जारी टी विफलता - कि Word.random() पहले से ही लागू किया जा चुका है।

मैं रेल 3.0 बीटा 4 और मोचा 0.9.8 चला रहा हूं। मैंने अपनी समस्या के समाधान के लिए लंबे और कठिन खोज की है, लेकिन मुझे यह प्रतीत नहीं होता है। मैं रुबी/रेल के लिए नया हूं इसलिए भाषा और ढांचे से अपरिचित हूं।

अग्रिम धन्यवाद!

उत्तर

7

मुझे एक ही समस्या थी, मॉक कार्यक्षमता परीक्षण के लिए अलग नहीं थी, ऐसा लगता है कि यह मोचा के लोड ऑर्डर के साथ एक समस्या है।

मुझे रेलवे 3 के साथ काम करने के लिए मोचा प्राप्त करने में कुछ समस्याएं थीं। मैं के बारे में कुछ stackoverflow पदों पाया है, लेकिन जब तक मैं

मूल रूप से agoragames.com पर एक पोस्ट पाया समाधान को भूल गए हैं नहीं किया था, अपनी परियोजना के Gemfile में, की आवश्यकता होती है मोचा के लिए तरह दिखना चाहिए:

gem 'mocha', :require => false 

फिर test/test_helper.rb में, मोचा के लिए एक लाइन की आवश्यकता होती है जोड़ें:

... 
... 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 
require 'mocha' 

class ActiveSupport::TestCase 
... 
... 

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

2

आपको मोचा की आवश्यकता कैसे है? क्या आप बंडलर का उपयोग कर रहे हैं? ऐसा लगता है जैसे मोचा टियरडाउन हुक नहीं कहा जा रहा है?

+0

क्या टियरडाउन को परीक्षणों के बीच बुलाया जाना चाहिए? – pushmatrix

+1

यदि 'मोचा' सही तरीके से लोड किया गया है, तो इसमें 'मोचा :: एपीआई # मोचा_एवरिफाइ' और 'मोचा :: एपीआई # मोचा_टेरडाउन' कहने के लिए परीक्षण ढांचे को बंदर-पैच किया जाएगा यानी आपको उन्हें स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है। कारण मैं पूछ रहा था कि 'मोचा' की आवश्यकता कैसे थी, यह काम करना था कि चीजें सही क्रम में लोड की जा रही हैं, ताकि बंदर-पैचिंग सही ढंग से काम करे। –

+1

यदि आप अपने परीक्षण चलाते समय 'MOCHA_OPTIONS = डीबग' को पर्यावरण चर के रूप में सेट करते हैं, तो आप देखेंगे कि कौन से टेस्ट फ्रेमवर्क सफलतापूर्वक बंदर-पैच किए जा रहे हैं। यदि आपको अभी भी इसमें समस्याएं आ रही हैं, तो मुझे बताएं कि डीबग आउटपुट क्या है और मुझे बताएं कि आप किस मोचा का उपयोग कर रहे हैं। धन्यवाद। –

19

मोचा को अंतिम रूप से लोड करने की आवश्यकता है। मैंने भी इस समस्या के साथ बहुत संघर्ष किया।

#Gemfile 
    group :test 
    gem 'mocha', '~>0.9.8', :require => false 
    ... 
    end 

और

test_helper.rb 
    .... 
    #at the very bottom 
    require 'mocha' 
+1

बिल्कुल मुझे जो चाहिए ... – pushmatrix

+0

बिल्कुल मुझे जो चाहिए वह भी। मैं घंटों के लिए अपने बालों को फाड़ रहा था! धन्यवाद! :) –

+0

+1, बंडलर के माइग्रेशन के साथ मैं मोचा लोडिंग –

0

इसके अतिरिक्त, यह mocha_teardown लगता rails31 साथ नहीं कहा जा रहा है। Mocks कि सेटअप कर रहे हैं निकाल दिए जाते हैं कभी नहीं ... (इस अतिरिक्त हैक यह ठीक करता है)

class ActiveSupport::TestCase 
    def teardown 
     super 
     Mocha::Mockery.instance.teardown 
     Mocha::Mockery.reset_instance  
    end 
    end 
0

उन समाधान अपने दम पर मेरे लिए काम नहीं किया, रूबी 2.2.2 का उपयोग कर, 4.2.2 रेल, मोचा 1.1। 0, कंधे-संदर्भ 1.2.1, factory_girl_rails 4.5.0 और कुछ और परीक्षण संबंधित रत्न।

क्या यह भी था मेरी test_helper.rb के निचले भाग में इन दो पंक्तियों चलती किया:

require 'mocha/setup' 
require 'mocha/test_unit' 

मैं भी require 'test/unit' हटा दिया। ऐसा लगता है कि mocha/test_unit पहले से ही मेरे लिए ऐसा करता है।

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