What you really want to do is mock the default_timezone for the scope of
a particular test. For example,
require 'mocha'
class MagikTest < ActiveSupport::TestCase
def test_something
tz = 'Alaska'
ActiveRecord::Base.stubs(:default_timezone).returns(tz)
assert_equal tz, ActiveRecord::Base.default_timezone
end
end
This just shows you how the stubbing works; in practice, this test is
testing the Mocha library, and not your app. :) The trick here is to
decide what you want the default_timezone call to return, and assign
that value to tz. Then every time you call AR::Base.default_timezone
during that test, you'll get back the value of tz.
You'll need to grab the mocha library first: gem install mocha
You can use this to test your app against multiple timezones to really
make sure it works.
Brent
James Byrne wrote:
> I have a requirement to test code whose execution depends upon the
> default_timezone setting. I have tried several approaches to this but
> nothing that I do in my test seems to alter the behaviour that is set in
> environment.rb.
>
> Is there a way to dynamically alter AR's method of storing datetime
> during a test? Currently I attempt to do this in this fashion:
>
> [ "local", "utc" ].each do |tz|
> ActiveRecord::Base.default_timezone = tz
> @my_mage = Magik.new
> @my_mage.description = tz
> @my_mage.my_time_local = DateTime.now
> @my_mage.my_time_utc = DateTime.now.utc
> @my_mage.save!
> puts @my_mage.description
> end
>
> but the contents of the my_time_local and my_time_utc do not seem to be
> what I expect:
>
> default_timezone = local
> Local: Mon Feb 09 14:20:06 UTC 2009 = 1234189206.0 <- AR.my_time_local
> now: Mon Feb 09 14:20:06 -0500 2009 = 1234207206.77585 <- Time.now
> UTC: Mon Feb 09 19:20:06 UTC 2009 = 1234207206.0 <- AR.my_time.utc
> now: Mon Feb 09 19:20:06 UTC 2009 = 1234207206.77609 <- Time.now.utc
>
> default_timezone = utc
> Local: Mon Feb 09 14:20:06 UTC 2009 = 1234189206.0 <- AR.my_time_local
> now: Mon Feb 09 14:20:06 -0500 2009 = 1234207206.77807 <- Time.now
> UTC: Mon Feb 09 19:20:06 UTC 2009 = 1234207206.0 <- AR.my_time.utc
> now: Mon Feb 09 19:20:06 UTC 2009 = 1234207206.7783 <- Time.now.utc
> .
>
> Is it possible to override AR default_timezone values for testing?
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---