rails rack_test feature example ruby-on-rails ruby rspec tdd bdd

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