在不更改系统时钟的情况下在rspec测试中设置系统时间

时间:2013-04-12 14:54:32

标签: ruby-on-rails ruby rspec timezone clock

我正在努力让rails 3应用程序准备好使用时区。我的开发机器在EDT中,我托管的服务器是UTC。我的rspec测试中是否有一种方法可以更改ruby正在使用的系统时区,以便我使用相同的系统时区运行测试而无需更改计算机上的系统时钟?我看过Delorean和Timecop,他们不是我想要的。我正在寻找像

这样的东西
Time.system_time_zone = "UTC"

...然后Time.now将返回UTC时间,而不是我的系统时区设置的任何时间。

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:-1)

Rails为您提供您正在寻找的内容:

Time.zone = "UTC"

请查看http://api.rubyonrails.org/classes/Time.html#method-c-zone-3D以获取更多信息。