Установка времени системы в тестах rspec без изменения системных часов
Я работаю над тем, чтобы приложение rails 3 готово использовать часовые пояса. Моя машина разработки находится в EDT, а серверы, на которых я размещаюсь, находятся в UTC. Есть ли способ в моих тестах rspec, чтобы изменить системный часовой пояс, используемый рубином, чтобы я запускал тесты с использованием одного и того же системного часового пояса, не меняя системные часы на моем компьютере? Я посмотрел на Делорейна и Timecop, и они не то, что я ищу. Я ищу что-то вроде
Time.system_time_zone = "UTC"
... и затем Time.now вернет время UTC вместо того, что установлено в моем системном часовом поясе.
Ответы
Ответ 1
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 time" do
Time.now.utc?.should be_true
end
end
Ответ 2
Rails дает вам именно то, что вы ищете:
Time.zone = "UTC"
Посмотрите http://api.rubyonrails.org/classes/Time.html#method-c-zone-3D для получения дополнительной информации.