2013-02-22 60 views
18

की तुलना में कम (या अधिक) है, तो मेरे ऐप में मैं Car मॉडल चाहता हूं।आरएसपीसी में - मैं कैसे परीक्षण कर सकता हूं यदि एक विशेषता

इसमें दो क्षेत्रों के बीच दो फ़ील्ड होंगे: date_from और date_till (किसी व्यक्ति द्वारा इसका उपयोग करने की अवधि निर्दिष्ट करने के लिए)।

और मैं चाहता हूं कि मॉडल उस तारीख को मान्य करे, दिनांक दिनांक से कम या बराबर होना चाहिए। जाहिर है

require 'spec_helper' 

describe Car do 
    it {should validate_presence_of(:model)} 
    it {should validate_presence_of(:made)} 

    it "should have date_till only if it has date_from" 
    its "date_till should be >= date_from" 
end 

, जहां मैं date_from से अधिक होना date_till सेट करने की कोशिश करेंगे मैं सिर्फ एक "लंबे" परीक्षण लिख सकते हैं - और मॉडल सिर्फ होना चाहिए:

मेरे model_spec.rb मसौदा इस तरह दिखता है अवैध। लेकिन शायद ऐसा करने के कुछ शानदार तरीके हैं?

तो, मैं (आरएसपीईसी मैचर्स का उपयोग करके) कैसे मान्य कर सकता हूं कि एक फ़ील्ड दूसरे से अधिक नहीं है?

upd: मैं @ itsnikolay के जवाब को देखा और कहा कि जैसे कि यह कोडित:

it "should not allow date_till less than date_from" do 
    subject.date_from = Date.today 
    subject.date_till = Date.today - 1.day 

    subject.valid?.should be_false 
end 

matchers बिना यह करने के लिए था। ठीक है, नहीं एक त्रासदी :)

उत्तर

44

इस मामले में किसी को भी में पिछले जवाब के लिए एक विकल्प है बजाय अपेक्षा वाक्य रचना के लिए खोज कर रहा है वाक्यविन्यास चाहिए।

expect(@car.date_from).to be <= @car.date_till

संसाधन:

8

बस <=

date_from.should be <= date_till 
+0

में अगर वे दोनों शून्य के रूप में शुरू किया? परीक्षण पास होगा, लेकिन क्या यह सभी व्यवहार को कवर करता है? –

4
@car = Car.create \ 
    name:  'Buggy', 
    date_from: Date.today + 1.day, 
    date_till: Date.today + 2.day 

expect(@car.date_from).to be <= @car.date_till 

अधिक जानकारी का उपयोग करें: RSpec Comparison matchers

2

या नई वाक्य रचना

expect(date_from).to be <= date_till