2014-07-03 1 views
0

j'essayer de truquer le Date.today afin de tester un scénario dans mon application rails:essai rspec avec la date fausse

before do 
    Date.stub(:today).and_return("2010-10-01".to_date) 
end 

J'ai une portée (j'utilise bijou Squeel) qui est censé trouver l'avenir paiements dans mon DB:

class Payment < ActiveRecord::Base 
    scope :future, -> { where{payment_date > Date.today} } 
end 

(je le fais avec un lambda parce que dans le code d'origine du champ d'application utilise un tamiseur, j'ai posté ici un code simplifié.)

Quand je lance la spécification, il semble comme la date est c calculé à l'intérieur du lambda/sql et j'obtiens des résultats pour les paiements qui sont à venir par rapport à la date réelle (à la place mon faux 01/10/10) - pouvez-vous confirmer que j'ai raison? vous avez une suggestion comment je peux tester un tel scénario avec rspec?

Répondre

2

Vous devriez jeter un oeil à la gemme TimeCop. Je permet de figer la date à un moment donné.

Voici le lien https://github.com/travisjeffery/timecop

+0

belle pierre précieuse, mais il ne résout pas le problème des dates – benams

+0

Ceci est précisément le problème que Timecop a été créé pour résoudre. – zetetic