0

私はこれらの属性を扱うモデルを持っています:

  • prelaunch_date
  • 打ち上げ日
  • 終了日

「適時性を検証する」gem を使用して、models/deal.rb で、発売日が発売前の日付と終了日の間にあることを検証します。

 # Validates order of dates
 validates_datetime :game_launch_date, :after => :prelaunch_date
 validates_datetime :game_end_date, :after => :game_launch_date

それをrspecでテストする必要があります。どうやってやるの ? 以下のことを試しましたが、うまくいきません。

describe "validations" do
it { should_not allow_value(:prelaunch_date - 1.day).for(:launch_date) }
it { should_not allow_value(:end_date + 1.day).for(:game_launch_date) }

end
4

2 に答える 2

1

あなたはアイデアを持っていますが、あまりにも多くの構文マジックを期待しているようです. たとえば、これを評価することはできません: :prelaunch_date - 1.day

ゲームの発売日を検証するために、これに沿って何かを行うことができます:

describe "validation" do
  context "of game launch date" do
    let(:date) { Date.new(2013, 1, 2) }
    subject { described_class.new(:prelaunch_date => date) }

    it "requires game launch to be after prelaunch" do
      should_not allow_value(date - 1.day).for(:game_launch_date)
      should_not allow_value(date).for(:game_launch_date)
      should allow_value(date + 1.day).for(:game_launch_date)
    end
  end
end
于 2013-09-25T08:21:32.517 に答える
0

おそらく、より手動でテストする必要があります。検証の 1 つが正しく設定されていることのテストは、次のように行うことができます。

let(:deal) { Deal.new(:pre_launch_date => Date.today) }

it "must have game launch date after pre launch date" do
  deal.game_launch_date = 1.day.ago
  deal.valid?
  expect(deal.errors[:game_launch_date]).to_not be_empty
end
于 2013-09-21T12:08:52.067 に答える