我在我的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
我想這是關於夏令時或什麼的?我該如何解決這個問題?
什麼是您到config/environment.rb時區顯示(例如我的節目config.time_zone ='東部時間(美國和加拿大)')? – jschorr
它被註釋掉,意味着它默認爲UTC(這就是評論所說的)。但是你正在做些什麼,UTC比我當地時間晚一個小時。但是,如果在同一個應用程序中使用'DateTime.now'設置了一切,那麼有時不會是UTC? –
如果使用'Time.now'而不是'DateTime.now',會發生什麼? –