ruby on rails - rack_test - En RSpec: ¿cómo puedo probar si un atributo es menor(o más) que otro?
ruby capybara github (4)
Esta es una alternativa a las respuestas anteriores en caso de que alguien esté buscando la sintaxis Expect en lugar de la sintaxis Should.
expect(@car.date_from).to be <= @car.date_till
Recursos:
En mi aplicación quiero tener un modelo de Car
.
Tendrá dos campos entre otros: date_from
y date_till
(para especificar un período de tiempo que alguien lo estuvo usando).
Y quiero que el modelo valide que date_from debe ser menor o igual que date_till.
Mi borrador de model_spec.rb se ve así:
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
Obviamente, solo puedo escribir una prueba "larga" en la que intentaré establecer date_till para que sea mayor que date_from, y el modelo simplemente no será válido. Pero tal vez hay algunas formas elegantes de hacerlo?
Entonces, ¿cómo puedo (usando los comparadores RSpec) validar que un campo no es mayor que otro?
upd: Miré la respuesta de @ itsnikolay y la codifiqué así:
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
Había que hacerlo sin matchers. Bueno, no es una tragedia :)
O en nueva sintaxis.
expect(date_from).to be <= date_till
Solo usa <=
date_from.should be <= date_till
@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
Más detalles: RSpec Comparadores de comparación