Задержка конвертации времени, приводящая к странной ошибке ожидания мокко - PullRequest
0 голосов
/ 12 ноября 2010

Я не уверен, что вы, ребята, будете так тестировать, но я парень из TDD и продолжаю сталкиваться со странными вещами. Временные метки как-то конвертируются диджеем или часовым поясом ... Я не знаю. Тестовый пример следует

Я использую delayed_job 2.0.3

data = {:value => 0.856, :timestamp => Time.zone.now}
job = MyMailer.send_later :send_values, data, emails

MyMailer.expects(:send_values).with(data, emails).once
job.payload_object.perform

class MyMailer
  def self.send_values(data, emails)

  end
end

ОК, ошибка ожидания теста

unexpected invocation: MyMailer.send_values({:value => 0.856576407208833, :timestamp => Thu Nov 11 22:01:00 UTC 2010 (1289512860.94962 secs)}, ..
unsatisfied expectations:
- expected exactly once, not yet invoked:  MyMailer.send_values({:value => 0.856576407208833, :timestamp => Thu, 11 Nov 2010 23:01:00 CET +01:00}...

с датой и временем это похоже, DateTime.now вместо Time.zone.now

got      :timestamp => Thu Nov 11 23:13:33 +0100 2010 (1289513613.0 secs)
expected :timestamp => 2010-11-11T23:13:33+01:00

Что происходит? Как я могу контролировать это (я хочу)?

1 Ответ

1 голос
/ 12 ноября 2010

Я думал, что у меня есть ответ на этот вопрос, когда я впервые увидел вопрос. Но я больше не знаю, так что вот предположение:

Поскольку Time.zone.now, DateTime.now и Time.now немного отличаются друг от друга, а Zone - это то, что Rails создал (я думаю), возможно, что ruby ​​где-то в вашей среде тестирования пропускает зона-штуковина? Time.zone.now.to_datetime спас меня от подобных вещей раньше. Он позволяет вам использовать зону, и вы получите тот же формат, что и у DateTime.now, в котором отсутствует DateTime.zone.now.

Try: data = {:value => 0.856, :timestamp => Time.zone.now.to_datetime}
...