2014-11-04 99 views
0

我想設置一個RSpec的測試時區以這種方式:設置時區

zone = ActiveSupport::TimeZone.new('Hawaii') 
Time.stub(:now) { Time.now.in_time_zone(zone) } 

這給了我一個堆棧層太深的錯誤,我缺少什麼嗎?

回答

4

嘗試這樣做:

zone = ActiveSupport::TimeZone.new('Hawaii') 
Time.stub(:now){ Time.new.in_time_zone(zone) } 

我不知道,但似乎磕碰now,然後調用Time.now塊是造成堆棧層次過深的錯誤。

+0

甜,僅此而已。我正在嘗試更改Delorean.time_travel_to(1.days.ago)上的時區。我想通過扼殺Time.now我可以改變時區,因爲time_travel_to使用Time.now。這在修復程序運行後無法使用。你不會碰巧有一個想法嗎? – trueinViso 2014-11-04 18:23:40

+0

對不起,我從來沒有用Delorean嘲笑我的規格。順便說一句,[Delorean](https://github.com/bebanjo/delorean)看起來過時了,你是否考慮過使用[Timecop](https://github.com/travisjeffery/timecop)呢? – Surya 2014-11-04 18:44:32

+0

是的,我正在做一箇舊項目。我試圖避免爲一次測試使用不同的寶石,但我可能不得不嘗試。我有一個測試在下午4點後失敗。當測試在Semaphore上運行時,因爲服務器使用UTC。這真的很煩人,我想解決它。 – trueinViso 2014-11-04 18:47:00

0

你可以嘗試這樣的事情,如果你想每次都遵循特定的時間在您的測試

Time.stub(:now).and_return(Time.mktime(2017,01,23,11,00,00).gmtime)