in your test_helper:

require 'mocha'

Then, in your test

def test_something
  tz = :local
  ActiveRecord::Base.expects(:default_timezone).returns(tz)
  assert_equal tz, ActiveRecord::Base.default_timezone
end

The trick is to set tz to be whatever you want to get back from
AR::Base.default_timezone.  If you use AR::Base.expects, then your
test will fail if AR::Base.default_timezone is called more than once
or not at all.  If you don't care how many times it gets called (i.e.,
if that's not something you need to test), then use "AR::Base.stubs
(:default_timezone).returns(tz)" instead.

Brent

On Feb 9, 11:30 am, James Byrne <[email protected]>
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 viahttp://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
-~----------~----~----~----~------~----~------~--~---

Reply via email to