代码之家  ›  专栏  ›  技术社区  ›  oma

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

  •  0
  • oma  · 技术社区  · 15 年前

    我不确定你们是否像这样测试过,但我是一个TDD的人,总是磕磕绊绊地撞在Wierd的东西上。时间戳由DJ或时区转换。我不知道。测试示例如下

    我用的是延迟工作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
    

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Christian    15 年前

    当我第一次看到这个问题的时候,我以为我已经得到了答案。但我不再这样了,所以我想:

    既然time.zone.now、datetime.now和time.now彼此略有不同,zone是Rails创建的东西(我认为),它可能是测试框架中某个地方的Ruby遗漏了zone thingy吗?从time.zone.now.to\u datetime以前就把我从类似的事情中拯救出来了。它允许您使用区域,并且您得到与datetime.now相同的格式,witch缺少datetime.zone.now。

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