Zonebie prevents bugs in code that deals with timezones by randomly assigning a zone on every run.
- MRI (1.8.7, 1.9.2, 1.9.3)
- JRuby (1.6)
- Rubinius (1.2, 2.0)
And either of these gems which adds timezone support to Ruby:
activesupport>= 2.3 (Rails 2.3, 3.0, 3.1, 3.2)
If using Bundler (recommended), add to Gemfile:
Usage with Rails & ActiveSupport
ActiveSupport allows setting a global timezone that will be used for many date and time calculations throughout the application.
Zonebie can set this to a random timezone at the beginning of test runs.
Specifically for ActiveSupport, it sets
Test::Unit & Minitest
Add a file
features/support/zonebie.rb with the following contents:
Usage with TZInfo
Zonebie can use the
tzinfo gem, allowing it to work outside of ActiveSupport
Zonebie.set_random_timezone does not work outside of ActiveSupport
because there is not a concept of a global timezone setting. If you simply need
a random timezone for some other part of your tests, Zonebie can help.
zone = TZInfo::Timezone.get(Zonebie.random_timezone) puts zone.now # Also works in Rails/ActiveSupport zone = ActiveSupport::TimeZone[Zonebie.random_timezone] puts zone.now
Zonebie.set_random_timezone is called, Zonebie assigns a timezone and
prints a message to STDOUT:
[Zonebie] Setting timezone to "Eastern Time (US & Canada)"
If you would rather that Zonebie not print out this information during your tests,
put Zonebie in quiet mode before calling
Zonebie.quiet = true
To rerun tests with a specific timezone (e.g., to reproduce a bug that only
seems present in one zone), set the
TZ environment variable:
# Assuming tests run with simply `rake` TZ="Eastern Time (US & Canada)" rake
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Added some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request