2011-08-16 53 views
3

我在我的Rails的一個類的方法如下:Rails時間格式化測試失敗,因爲它關閉了一個小時?

def human_departure_time 
    "#{departure_time.strftime("%A, %d %B %Y")} at #{departure_time.strftime("%I:%M %p")}" 
end 

正如你所看到的,它只是需要模型和格式它的datetime屬性,使其更加人性化友好。

反正我對這個方法如下測試:

describe "human_departure_time" do 
    it "should output the time in readable format" do 
    # first I use the Timecop gem to freeze the time 
    Timecop.freeze(DateTime.now) do 
     bus_time = DateTime.now + 1.days 
     # factory a bus with a specific departure time 
     bus = Factory :bus, departure_time: bus_time 
     expected = "#{bus_time.strftime("%A, %d %B %Y")} at #{bus_time.strftime("%I:%M %p")}" 
     # check that the output is as expected 
     bus.human_departure_time.should == expected 
    end 
    end 
end 

很簡單,但測試一小時失敗,出現以下的輸出:

Failures: 

    1) Bus human_departure_time should output the time in readable format 
    Failure/Error: bus.human_departure_time.should == expected 
     expected: "Wednesday, 17 August 2011 at 03:13 AM" 
      got: "Wednesday, 17 August 2011 at 02:13 AM" (using ==) 
    # ./spec/models/bus_spec.rb:34:in `block (4 levels) in <top (required)>' 
    # ./spec/models/bus_spec.rb:30:in `block (3 levels) in <top (required)>' 

這裏是我的客車廠只是櫃面這很重要。我在測試中用凍結時間加上一小時來覆蓋出發時間。

factory :bus do 
    origin_name "Drogheda" 
    event_name "EP" 
    departure_time { DateTime.now + 14.days } 
end 

我想這是關於夏令時或什麼的?我該如何解決這個問題?

+0

什麼是您到config/environment.rb時區顯示(例如我的節目config.time_zone ='東部時間(美國和加拿大)')? – jschorr

+0

它被註釋掉,意味着它默認爲UTC(這就是評論所說的)。但是你正在做些什麼,UTC比我當地時間晚一個小時。但是,如果在同一個應用程序中使用'DateTime.now'設置了一切,那麼有時不會是UTC? –

+0

如果使用'Time.now'而不是'DateTime.now',會發生什麼? –

回答

3

ActiveRecord可以自動將模型中的時間屬性轉換爲本地時間。

您可以嘗試使用%Z參數strftime來查看輸出時間戳的時區,以查看可能的轉換潛入您的時間的位置。

一些谷歌搜索提示,可能是相關的:


default_timezone

http://apidock.com/rails/ActiveRecord/Base/default_timezone/class


ActiveRecord::Base.time_zone_aware_attributes
config.active_record.time_zone_aware_attributes

http://tamersalama.com/2011/01/10/rails-disable-timezone-conversions/
https://mirrors.kilnhg.com/Repo/Mirrors/From-Git/Rails/History/70cb470c1ab8
http://www.ruby-forum.com/topic/2096919
http://www.ruby-forum.com/topic/890711


+0

是的,deafult_timezone設置是問題。謝謝。 –