Timecop无法正确模拟日期

时间:2015-10-13 06:41:55

标签: ruby-on-rails cucumber timecop

我正在使用TimeCop Gem来测试对时间敏感的测试用例。 lib目录中有一个文件。它只包含字符串常量。

实施例

module DateStr
   SAMPLE = "Some date #{Date.current}"
end

在我的黄瓜测试用例中,这部分代码没有得到模拟时间。它选择系统时间。那是为什么?

1 个答案:

答案 0 :(得分:1)

加载DateStr后,会创建SAMPLE常量并指定当前日期。

我会说这是常量的错误用例,因为它们不应该改变。

EDIT。

我不会将常量用于此行为。 hackish 的方式是使用lambdas:

module DateStr
   SAMPLE = -> {"Some date #{Date.current}"}
end
DateStr::SAMPLE.call # This will evaluate to current date

但这不是一个好的用例,因为该值不是常量它自己,而是对于这种行为,你应该使用一个简单的类方法:

module DateStr
   def self.sample
     "Some date #{Date.current}"
   end
end