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

Dan*_*gan 15 ruby timezone rspec ruby-on-rails clock

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

Time.system_time_zone = "UTC"
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ell 12

before {Time.stub(:now) {Time.now.utc}}
Run Code Online (Sandbox Code Playgroud)

有了这个,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
Run Code Online (Sandbox Code Playgroud)