/* CODIFICANDO */

Relatos de um programador em contínua aprendizagem.

Testar atributos do tipo datetime com o Rspec

com 2 comentários

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.

Escrito por cassiomarques

Julho 3, 2009 às 11:04 pm

Publicado em rails, rspec, ruby, testes

Etiquetado com , ,

2 Respostas

Subscreva aos comentários comRSS.

  1. 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!

    Thiago Pradi

    Julho 3, 2009 em 11:09 pm

  2. Legal Cássio,

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

    Valeu, abraço.

    Carlos A. da Silva

    Julho 4, 2009 em 12:36 am


Deixe uma resposta