2013-02-22 14 views
18

Nella mia app voglio avere un modello Car.In RSpec - come posso verificare se un attributo è minore (o più) di un altro

Avrà due campi tra gli altri: date_from e date_till (per specificare un periodo di tempo in cui qualcuno lo stava usando).

E voglio che il modello convalidi che date_from dovrebbe essere inferiore o uguale a date_till.

mio progetto model_spec.rb si presenta così:

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 

Ovviamente, posso solo scrivere un test "lungo", dove cercherò di impostare date_till essere superiore a date_from - e il modello dovrebbe essere solo non valido. Ma forse ci sono alcuni modi eleganti per farlo?

Quindi, come posso (utilizzando i parametri RSpec) convalidare che un campo non è maggiore di un altro?

UPD: ho guardato @ di itsnikolay risposta e codificati in quel modo:

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 

doveva fare senza matchers. Beh, non una tragedia :)

risposta

44

Questa è un'alternativa alle risposte precedenti nel caso in cui qualcuno sta cercando la sintassi Aspettatevi invece della sintassi di Should.

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

Risorse:

8

Basta usare <=

date_from.should be <= date_till 
+0

se entrambi inizializzato come zero? il test passerà, ma copre tutto il comportamento? –

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 

Maggiori dettagli: RSpec Comparison matchers

2

o in nuova sintassi

expect(date_from).to be <= date_till 
Problemi correlati