2013-02-22 10 views
18

W mojej aplikacji chcę mieć model Car.W języku RSpec - jak mogę przetestować, czy jeden atrybut jest mniejszy (lub większy) niż inny

Będzie zawierać dwa pola między innymi: date_from i date_till (w celu określenia okresu, w którym ktoś go używał).

I chcę, aby model sprawdził, czy data_od nie powinna być mniejsza lub równa niż date_till.

Moja model_spec.rb projekt wygląda tak:

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 

Oczywiście, można po prostu napisać „długiej” test gdzie postaram się ustawić date_till być większa niż date_from - a model właśnie powinno być nieważny. Ale może istnieją pewne eleganckie sposoby na zrobienie tego?

W jaki sposób mogę (przy użyciu interpreterów RSpec) sprawdzić, czy jedno pole nie jest większe od innego?

UPD: Spojrzałem na odpowiedź użytkownika @ itsnikolay i oznaczenia go tak:

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 

musiał to zrobić bez dopasowujących. Cóż, nie jest to tragedia :)

Odpowiedz

44

Jest to alternatywa do poprzednich odpowiedzi w przypadku ktokolwiek szuka składni Expect zamiast Składni powinien.

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

Zasoby:

8

Wystarczy użyć <=

date_from.should be <= date_till 
+0

jeśli oboje zainicjowany jako zero? test minie, ale czy obejmuje on wszystkie zachowania? –

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 

Więcej szczegółów: RSpec Comparison matchers

2

czy w nowej składni

expect(date_from).to be <= date_till 
Powiązane problemy