Project

zonebie

0.16
No commit activity in last 3 years
No release in over 3 years
Runs your tests in a random timezone
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.14.0
>= 0
~> 3.4
>= 1.2.2, ~> 1.2
>= 1.2016.1
 Project Readme

Zonebie

Build Status

Zonebie prevents bugs in code that deals with timezones by randomly assigning a zone on every run.

If Zonebie helps trigger a timezone-related bug, you can temporarily assign the ZONEBIE_TZ environment variable to make your tests deterministic while you debug (more information below).

Requirements

  • MRI (2.0.x, 2.1.x, 2.2.x, 2.3.x, 2.4.x)
  • JRuby (1.7)
  • Rubinius (3.x)

And either of these gems which adds timezone support to Ruby:

  • activesupport >= 3.0 (Rails 3.0, 3.1, 3.2, 4.0, 4.1, 4.2)
  • tzinfo >= 1.2

Installation

If using Bundler (recommended), add to Gemfile:

gem 'zonebie'

Usage with Rails & Active Support

Active Support 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 Active Support, it sets Time.zone.

Test::Unit & Minitest

Add to test/test_helper.rb:

Zonebie.set_random_timezone

RSpec

Add to spec/spec_helper.rb:

require "zonebie/rspec"

Cucumber

Add a file features/support/zonebie.rb with the following contents:

Zonebie.set_random_timezone

Usage with TZInfo

Zonebie can use the tzinfo gem, allowing it to work outside of Active Support (Rails).

However, Zonebie.set_random_timezone does not work outside of Active Support 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/Active Support
zone = ActiveSupport::TimeZone[Zonebie.random_timezone]
puts zone.now

Reproducing Bugs

When Zonebie.set_random_timezone is called, Zonebie assigns a timezone and prints a message to STDOUT:

[Zonebie] Setting timezone: ZONEBIE_TZ="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 set_random_timezone:

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 ZONEBIE_TZ environment variable:

# Assuming tests run with simply `rake`
ZONEBIE_TZ="Eastern Time (US & Canada)" rake

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request