2013-02-22 31 views
18

在我的應用程序中,我想要有一個Car模型。在RSpec中 - 如何測試一個屬性是否比另一個屬性更少(或更多)

它將包含兩個字段:date_fromdate_till(用於指定某人使用它的時間段)。

我希望模型驗證date_from應該小於或等於date_till。看起來

我model_spec.rb草案是這樣的:

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_till比date_from更大 - 與模型只是應無效。但也許有一些優雅的方式來做到這一點?

那麼,我如何(使用RSpec匹配器)驗證一個字段不會比另一個字段更大?

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 

不得不這樣做不匹配器。好了,不是悲劇:)

回答

44

這是在任何情況下,前面的答案,另一種方法是搜索的期待,而不是語法應該的語法。

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

資源:

8

只需使用<=

date_from.should be <= date_till 
+0

如果他們都初始化爲零?測試會通過,但它覆蓋了所有的行爲? – 2013-02-22 09:33:18

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 
相關問題