2012-01-31 17 views
6

मुझे पूरा यकीन है कि मुझे यहां कुछ मूलभूत याद आ रही है।रुपेक और फैक्टरी गर्ल के साथ पहले_सेव कॉलबैक का परीक्षण

मैं परीक्षण करना चाहता हूं कि before_save कॉलबैक ऐसा करता है जो इसे करने के लिए किया जाता है, न केवल इसे कहा जाता है।

मैं निम्नलिखित परीक्षण लिखा है:

it 'should add lecture to question_type' do  
    @course = Factory :course, 
        :start_time => Time.now - 1.hour, 
        :end_time => Time.now       
    @question = Factory.create(:question, 
          :course_id => @course.id, 
          :created_at => Time.now - 10.minutes)       
    @question.question_type.should == 'lecture'  
end 

और मैं course और question निम्नलिखित कारखानों है

before_save :add_type_to_question 

protected 

def add_type_to_question 
    @course = Course.find(self.course_id) 
    now  = Time.now 
    if (time_now > lecture_start_time && time_now < lecture_end_time) && @course.lecture_days.map{|d| d.to_i}.include?(Time.now.wday) 
    self.question_type = "lecture" 
    end  
end 
:

Factory.define :course do |c| 
    c.dept_code {"HIST"} 
    c.course_code { Factory.next(:course_code) } 
    c.start_time { Time.now - 1.hour } 
    c.end_time { Time.now } 
    c.lecture_days { ["Monday", Time.now.strftime('%A'), "Friday"] } 
end 

Factory.define :question do |q| 
    q.content {"Why don't I understand this class!?"} 
    q.association :course 
end 

और मैं अपने Question मॉडल में निम्नलिखित कॉलबैक लिखा था

परीक्षण एफ रखता है बीमार ने कहा कि 'लेक्चर'

के बाद प्रश्नोत्तरी के लिए "मिला: शून्य", क्योंकि मैंने अपने कार्यान्वयन कोड के साथ कुछ भी गलत रूप से गलत नहीं देखा, इसलिए मैंने अपने विकास पर्यावरण में कॉलबैक की कोशिश की और वास्तव में इसे 'व्याख्यान' जोड़ने में काम किया प्रश्न प्रकार।

इससे मुझे लगता है कि मेरे परीक्षण में कुछ गड़बड़ हो सकती है। मुझे यहां क्या समझ नहीं आ रहा है? क्या Factory.create डिफ़ॉल्ट रूप से कॉलबैक छोड़ देता है?

+0

पहले से पहले सेव करने की कोशिश करें – cpuguy83

उत्तर

4

मैं प्रक्रिया को ट्रिगर करने के लिए Factory.create का उपयोग नहीं करता। फैक्ट्रीगर्ल का उपयोग परीक्षण सेटअप बनाने के लिए किया जाना चाहिए, वास्तविक कोड को ट्रिगर न करने के लिए जिसे आप परीक्षण करना चाहते हैं। आपका परीक्षण तो देखो की तरह होगा:

add_type_to_question अंदर एक पुट बयान और if बयान के अंदर एक दूसरे से जोड़े और देखो क्या होता: इस परीक्षा में अभी भी विफल

it 'should add lecture to question_type' do  
    course = Factory(:course, :start_time => Time.now - 1.hour, :end_time => Time.now) 
    question = Factory.build(:question, :course_id => course.id, :created_at => Time.now - 10.minutes, :question_type => nil) 

    question.save!       
    question.reload.question_type.should == 'lecture'  
end 

हैं, तो आप डिबगिंग शुरू कर सकते हैं।

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