35

私のアプリでは、Carモデルが欲しいです。

特に2つのフィールドがあります: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

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

4

4 に答える 4

91

通常、expectを使用することをお勧めしますが、すべきではありません

例えば:

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

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

于 2014-05-28T12:45:06.473 に答える
12

使用するだけ<=

date_from.should be <= date_till
于 2013-02-22T09:19:41.483 に答える
5

または新しい構文で

expect(date_from).to be <= date_till
于 2017-03-07T16:33:21.517 に答える
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比較マッチャー

于 2013-02-22T10:34:53.427 に答える