2013-06-19 10 views
12

मैं यह देखने के लिए दिनांक कैसे देख सकता हूं कि यह दो तिथियों के बीच है या नहीं? मुझे पता है कि तुलना में मैं दो से अधिक और कम कर सकता हूं लेकिन मैं तारीख के "बीच" को जांचने के लिए आरएसपीसी विधि चाहता हूं।आरएसपीसी - तिथि दो तिथियों के बीच होनी चाहिए

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

it "is between the time range" do 
    expect(Date.now).to be_between(Date.yesterday, Date.tomorrow) 
end 

मैं expect(range).to cover(subject) लेकिन कोई किस्मत की कोशिश की।

उत्तर

20

Date.today.should be_between(Date.today - 1.day, Date.today + 1.day)

+1

यह सही काम करता है। मुझे आश्चर्य है कि मुझे इसके लिए कोई दस्तावेज नहीं मिला। इसे परिभाषित करने की भी आवश्यकता नहीं है। –

+12

'.of (Date.today) be_within (1.day)' पसंद करते हैं। –

2

मैं इसे अपने आप कोशिश नहीं की है, लेकिन this के अनुसार आप इसे थोड़ा अलग उपयोग करना चाहिए:

it "is between the time range" do  
    (Date.yesterday..Date.tomorrow).should cover(Date.now) 
end 
+0

मैंने इस सवाल में ध्यान दिया कि मैंने पहले से ही कोशिश की है और मुझे कोई भाग्य नहीं था। मुझे लगता है कि आप इसे चूक गए। –

+0

ओह ठीक है, मैंने सोचा कि 'उम्मीद' और 'चाहिए 'के बीच एक अंतर है। क्षमा याचना। @ स्पुलन का जवाब देखें। – Amir

+0

बहुत अंतर नहीं है। हालांकि इस समाधान काम हो सकता है, मैं वास्तव में यह कैसे के साथ तारीखों/बार तुलना करता है पसंद नहीं है। –

1

आप को एक मिलान परिभाषित करने के लिए है, जाँच https://github.com/dchelimsky/rspec/wiki/Custom-Matchers

यह

RSpec::Matchers.define :be_between do |expected| 
    match do |actual| 
    actual[:bottom] <= expected && actual[:top] >= expected 
    end 
end 
it 'is between the time range' do 
    expect(Date.today).to be_between(Date.yesterday, Date.tomorrow) 
end 

it 'is between the time range' do 
    expect(Date.yesterday..Date.tomorrow).to cover Date.today 
end 

आप रेल का उपयोग नहीं कर रहे हैं, तो आप के लिए नहीं होगा Date::yesterday या Date::tomorrow परिभाषित: 210 यह आप

it "is between the time range" do 
    expect(Date.now).to be_between(:bottom => Date.yesterday, :top => Date.tomorrow) 
end 
+0

ग्रेट सॉल्यूशन लेकिन ऐसा लगता है कि आरएसपीईसी पहले से ही परिभाषित किया गया है (मेरे आवेदन के अनुसार)। –

8

वाक्यविन्यास आप ने लिखा दोनों सही RSpec हैं अनुमति देता है। आप मैन्युअल रूप से इसे समायोजित करने की आवश्यकता होगी:

it 'is between the time range' do 
    expect(Date.today).to be_between(Date.today - 1, Date.today + 1) 
end 

पहले संस्करण RSpec के predicate matcher में बनाया की वजह से काम करता है। यह matcher ऑब्जेक्ट्स पर परिभाषित तरीकों को समझता है, और उनके लिए प्रतिनिधियों के साथ ही एक संभावित ? संस्करण। Date के लिए, विधेय Date#between?Comparable सहित (लिंक देखें) से आता है।

दूसरे संस्करण में काम करता है क्योंकि RSpec cover मिलान परिभाषित करता है।

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