timecop~taylorfinnell
timecop.cr
A timecop inspired library to allow easy manipulation of time in tests. Originally authored by TobiasGSmollett.
Installation
Add this to your application's shard.yml
:
dependencies:
+ timecop:
+ github: crystal-community/timecop.cr
Usage
require "timecop"
Timecop.freeze
date = Time.new(2008, 10, 10, 10, 10, 10)
Timecop.freeze(date) do |frozen_time|
puts "#{frozen_time == Time.now}" # => true
end
Timecop.travel
Timecop.travel(Time.new(2014, 1, 1, 0, 0, 0)) do
puts Time.now # => 2014-01-01 00:00:00 +0900
sleep(5)
puts Time.now # => 2014-01-01 00:00:05 +0900
end
Timecop.scale
# seconds will now seem like hours
Timecop.scale(Time.now, 3600)
puts Time.now # => 2017-08-28 23:50:06 +0900
sleep(2.0)
# seconds later, hours have passed and it's gone from 23pm at night to 1am in the morning
puts Time.now # => 2017-08-29 01:50:21 +0900
Timecop.safe_mode
# turn on safe mode
Timecop.safe_mode = true
Timecop.safe_mode? # => true
# using method without block
Timecop.freeze Time.new(2008, 10, 10, 10, 10, 10)
# => Timecop::SafeModeException: Safe mode is enabled, only calls passing a block are allowed.
Development
Pull Request Welcome
Contributing
- Fork it ( https://github.com/TobiasGSmollett/timecop.cr/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- TobiasGSmollett TobiasGSmollett - creator
- Robacarp
Thanks
Thanks to Travis Jeffery for his awesome work on timecop.