Datetime 延迟作业转换时间,导致莫卡预期错误

Datetime 延迟作业转换时间,导致莫卡预期错误,datetime,delayed-job,Datetime,Delayed Job,我不确定你们是否这样测试,但我是一个TDD的家伙,一直跌跌撞撞地进入wierd的东西。时间戳通过DJ或时区进行转换。。。我不知道。测试示例如下 我正在使用delayed_作业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, e

我不确定你们是否这样测试,但我是一个TDD的家伙,一直跌跌撞撞地进入wierd的东西。时间戳通过DJ或时区进行转换。。。我不知道。测试示例如下

我正在使用delayed_作业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类似,
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

发生了什么事?我怎样才能控制它(我想吗)?

当我第一次看到这个问题时,我以为我已经找到了答案。但我现在不知道了,所以我猜:

由于Time.zone.now、DateTime.now和Time.now彼此略有不同,而且zone是Rails创建的(我认为),可能是测试框架中的ruby遗漏了zone之类的东西吗?Time.zone.now.to_datetime曾经把我从类似的事情中解救出来。它允许您使用zone,并且您可以获得与DateTime.now相同的格式,该格式缺少DateTime.zone.now

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

关于时区的问题,您肯定是对的,但在插入时这不是问题,而是DJ反序列化yaml(处理程序)时的问题,不使用配置的time.zone,只使用服务器时区(与time.now相同)是的,我明白了-但如果在插入之前将Time.zone.now调整为Time.zone.now.to_datetime,这是否正确?