私のアプリでは、Car
モデルが必要です。
とりわけ2つのフィールドがあります:date_from
およびdate_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マッチャーを使用して)あるフィールドが別のフィールドより大きくないことをどのように検証できますか?
pd: @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
マッチャーなしでそれをしなければなりませんでした。まあ、悲劇ではありません:)
一般的には expectを使用することをお勧めしますが、すべきではありません 。
例えば:
expect(@car.date_from).to be <= @car.date_till
リソース:- BetterSpecsの例 -- Rspec Docs
<=
を使用するだけです
date_from.should be <= date_till
@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比較マッチャー
または新しい構文で
expect(date_from).to be <= date_till