2013-02-22 8 views
18

私のアプリでは、Carモデルが必要です。RSpec - 1つの属性が別の属性よりも少ないかどうかをテストするには

date_fromdate_tillの2つのフィールドがあります(誰かがそれを使用していた時間を指定するため)。

そして、モデルで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_FROMよりも大きくなるようにdate_till設定しようとする「ロング」のテストを書くことができる - とモデルだけでなければなりません無効。しかし、多分それを行うためのエレガントな方法がありますか?

RSpecマッチャーを使用して、1つのフィールドが別のフィールドよりも大きくないことをどのように検証できますか?

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 

はマッチャーせずにそれをしなければなりませんでした。まあ、それは悲劇:)

答えて

8

だけ<=

date_from.should be <= date_till 
+0

どちらかのnilとして初期化されますか?テストは合格しますが、すべての動作をカバーしていますか? –

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 
関連する問題