如何在yaml灯具中指定RoR单元测试的相对日期

时间:2015-11-30 14:12:55

标签: ruby-on-rails unit-testing yaml

我正在使用yaml中的灯具编写单元测试,以便在rails项目中使用ruby。

对于<>n岁的用户,我们有很多测试。 例如:

young_kid:
  id: 2
  firstname: Nano
  lastname: Shinonome
  email: imarobot@nichijou.jp
  birthdate: 2000-05-11

有没有办法指定像2.days.from_now这样的相对日期?一旦达到阈值,我们的测试不会失败?

我们正在使用香草RoR单元测试。

2 个答案:

答案 0 :(得分:0)

对于动态灯具数据,最好使用FactoryGirl

但是,对于您的测试,您可以使用Timecop gem来确定测试期间的时间。以下是Timecop的单元测试结果:

Timecop.freeze(Date.new(2018, 5, 11, 0, 0, 0)) do
  assert young_kid.birthdate < 18.years.ago
end

答案 1 :(得分:0)

是的,有一种方法可以在fixtures yaml文件中指定相对日期。这样做......

young_kid:
  ...
  birthdate: <%= 2.days.from_now.to_date.to_s(:db) %>

侧面说明灯具是在测试生命周期的早期加载的,所以测试设置块中的冻结时间(使用类似Timecop的东西)会出现 灯具中的相对日期加载后,意味着你的灯具中的相对日期总是相对于今天。

这会严重限制测试中冻结时间的有效性。