Comment geler correctement le temps avec Timecop dans mes spécifications?
Je suis en train d'utiliser une combinaison de Timecop et l'interrogation de l'arel where_sql de données, mais je n'arrive pas à obtenir Timecop à fait figer le temps. J'ai essayé de Timecop.gel et Timecop.freeze(de Temps.maintenant), qui sont tous deux légèrement lors de l'utilisation des Temps.maintenant, dans mon spec.
Ce qui me manque? Ruby 1.9.2, Rails 3.1.0.rc5
--
erreur
Failure/Error: Game.unreleased.arel.where_sql.should eq("WHERE (release_date > '#{Time.now}')")
expected "WHERE (release_date > '0000-01-01 00:00:00 -0500')"
got "WHERE (release_date > '0000-01-01 05:00:00.000000')"
modèle
scope :unreleased, lambda { |limit = 4| where('release_date > ?', Time.now).
order('release_date asc').
limit(limit) }
spec
it "should retrieve games with a release date later than today" do
Timecop.freeze
Game.unreleased.arel.where_sql.should eq("WHERE (release_date > '#{Time.now}')")
end
source d'informationauteur Eric M.
Vous devez vous connecter pour publier un commentaire.
Mon utilisation de timecop dans les specs toujours ressemble à ceci:
Il est également conseillé d'utiliser le Temps.la zone proxy (de Temps.la zone.maintenant, il est Temps.la zone.utc, le Temps.la zone.local, etc) lors du traitement du temps dans une application rails.
J'ai juste eu un problème d'exécution Timecop avec RSpec est
expect
syntaxe quand j'étais en cours d'exécution:Où le temps n'était pas de correspondance. Pour le résoudre, j'ai mis
Timecop.freeze
dans unbefore
clause.(Je me rends compte que cette question est plus âgé et de RSpec
expect
syntaxe n'était pas là, mais je pense que l'ajout d'Timecop.freeze
à unbefore
de bloquer ou de clause peut aider les gens qui ont le même problème mentionné dans la question d'origine. Certes, il ne semble pas que poser une question et la réponse c'est la peine puisque ma question serait très très similaire à celui ci-dessus.)De voyage de la date et de l'inclure TimeHelpers, exemple: