ti-enxame.com

Em RSpec - como posso testar se um atributo é menor (ou mais) do que outro

Em meu aplicativo, quero ter um modelo Car.

Terá dois campos entre outros: date_from e date_till (para especificar um período de tempo que alguém estava usando).

E eu quero que o modelo valide que date_from deve ser menor ou igual a date_till.

Meu rascunho de model_spec.rb é assim:

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, posso escrever um teste "longo" onde tentarei definir date_till como maior que date_from - e o modelo deve ser inválido. Mas talvez existam maneiras elegantes de fazer isso?

Então, como posso (usando matchers RSpec) validar que um campo não é maior que outro?

pd: Eu olhei para a resposta de @ itsnikolay e codifiquei assim:

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

Tive que fazer isso sem combinações. Bem, não é uma tragédia :)

28
Nikita Hismatov

Geralmente é recomendado usar expect, not should .

Por exemplo:

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

Recursos: - exemplos BetterSpecs - Rspec Docs

61
Rian Rainey

Apenas use <=

date_from.should be <= date_till
10
Dogbert
@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

Mais detalhes: Matchers de comparação RSpec

4
itsnikolay

Ou em nova sintaxe

expect(date_from).to be <= date_till
3
Edmund Lee