Skip to content
julho 3, 2009 / cassiomarques

Testar atributos do tipo datetime com o Rspec

Você já tentou usar o Rspec para testar se o timestamp gravado em um campo datetime é igual a uma determinada data/horário? O código abaixo possivelmente irá falhar miseravelmente:

@blabla.update_attributes(:foo => "bar)
@blabla.updated_at.should == Time.now

o Time.now é bem preciso e vai pegar várias casas na faixa dos milissegundos, e isso pode gerar alguma diferença entre o retorno de Time.now quando a coluna foi atualizada no banco e quando você realiza a asserção no teste. Uma solução para o problema é fazer:

@blabla.updated_at.should be_close(Time.now, 1.second)

Esse teste passará para qualquer timestamp com uma diferença de +- 1 segundo em relação ao retorno do Time.now no momento da asserção. Altere esse delta T como desejar :).

Essa solução também é indicada para testar valores numéricos de ponto flutuante.

3 Comentários

Deixe um comentário
  1. Thiago Pradi / jul 3 2009 11:09 pm

    Interessante, aprendi mais uma :-)

    Geralmente usava o time_travel (http://github.com/notahat/time_travel/tree/master) pra fazer isso, mais acho que agora não vou mais precisar hehe

    um abraço!

  2. Carlos A. da Silva / jul 4 2009 12:36 am

    Legal Cássio,

    dica simples e bastante útil, não conhecia essa..

    Valeu, abraço.

  3. Lucas Catón / jan 19 2012 5:47 am

    O be_close(Time.now, 1.second) foi substituído agora pelo be_within(1).of(Time.now)

    :-)

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: