Techioz Blog

RSpec - ある属性が別の属性より小さい (または大きい) かどうかをテストするにはどうすればよいですか

概要

私のアプリでは車のモデルが必要です。

とりわけ、date_from と date_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_till を date_from よりも大きく設定する「長い」テストを作成するだけでよく、モデルは無効でなければなりません。しかし、おそらくそれを行うためのいくつかのエレガントな方法があるでしょうか?

では、(RSpec マッチャーを使用して) あるフィールドが別のフィールドより大きくないことを検証するにはどうすればよいでしょうか?

更新: @itsnikolayの回答を見て、次のようにコード化しました。

it "does 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

マッチャーなしでそれを行う必要がありました。まあ、悲劇ではありません:)

解決策

一般に、 should ではなく、expect を使用することをお勧めします。

例えば:

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

リソース: - BetterSpec の例 - Rspec ドキュメント