我正在努力让 Rails 3 应用程序准备好使用时区。我的开发机器在 EDT 中,而我托管的服务器在 UTC 中。在我的 rspec 测试中是否有办法更改 ruby 正在使用的系统时区,以便我使用相同的系统时区运行测试而无需更改计算机上的系统时钟?我调查过 Delorean 和 Timecop,但它们不是我要找的。我正在寻找类似的东西
Time.system_time_zone = "UTC"
...然后 Time.now 将返回 UTC 时间,而不是我的系统时区设置。
我正在努力让 Rails 3 应用程序准备好使用时区。我的开发机器在 EDT 中,而我托管的服务器在 UTC 中。在我的 rspec 测试中是否有办法更改 ruby 正在使用的系统时区,以便我使用相同的系统时区运行测试而无需更改计算机上的系统时钟?我调查过 Delorean 和 Timecop,但它们不是我要找的。我正在寻找类似的东西
Time.system_time_zone = "UTC"
...然后 Time.now 将返回 UTC 时间,而不是我的系统时区设置。
before {Time.stub(:now) {Time.now.utc}}
有了这个,Time.now
在你的测试中调用任何地方,它都会以UTC返回你的系统时间。
例子:
describe Time do
before {Time.stub(:now) {Time.now.utc}}
it "returns utc as my system's time" do
Time.now.utc?.should be_true
end
end
Rails 准确地为您提供了您正在寻找的东西:
Time.zone = "UTC"
查看http://api.rubyonrails.org/classes/Time.html#method-c-zone-3D了解更多信息。