web-dev-qa-db-ja.com

RSpecで-ある属性が別の属性よりも少ない(または多い)かどうかをテストするにはどうすればよいですか?

私のアプリでは、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

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

28
Nikita Hismatov

一般的には expectを使用することをお勧めしますが、すべきではありません

例えば:

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

リソース:- BetterSpecsの例 -- Rspec Docs

61
Rian Rainey

<=を使用するだけです

date_from.should be <= date_till
10
Dogbert
@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比較マッチャー

4
itsnikolay

または新しい構文で

expect(date_from).to be <= date_till
3
Edmund Lee