Onze dagmethode #14: Time#warp
Geplaatst door Remco van 't Veer vr, 22 feb 2008 08:00:00 GMT
Tijdreizen is verschrikkelijk handig maar jammer genoeg niet altijd even gemakkelijk. Als de realiteit het niet toestaat dan passen die gewoon aan!
class Time
def self.now_with_warping
@warptime || now_without_warping
end
class << self
alias_method :now_without_warping, :now
alias_method :now, :now_with_warping
end
def warp
self.class.instance_variable_set('@warptime', self)
yield
ensure
self.class.instance_variable_set('@warptime', nil)
end
end
Hiermee kunnen we gemakkelijk terug naar “Unix Epoch”:
Time.at(0).warp do
puts "The current time is: #{Time.now}"
end
Of vlak voor het einde der tijden:
Time.at(2 ** 31 - 1).warp do
Time.now + 1
end
Wat heb je er aan? Heel handig om tijds afhankelijke zaken te testen!
cool!
Wij gebruiken voor testing wat extra methods op Time.
Nu kun je mooi in je testen je tijd zetten. Op de carnavals datum bijvoorbeeld.
Niet vergeten in de teardown de time weer terug te zetten.
Mooi toch?