在rspec单元测试比较期间,updated_at时间不匹配

时间:2016-11-21 13:41:42

标签: unit-testing rspec-rails

if current_updated_time.eql?(user_obj.updated_at)

在进行更新操作时,我们正在比较updated_at。运行rspec时间和时区未正确匹配。

1 个答案:

答案 0 :(得分:0)

这是测试套件中的常见问题,幸运的是,有一些常见的解决方案。

您可以尝试从比较的时间戳中删除微秒(因为在最短的时间测量中,您的RDBMS供应商和主机应用程序语言可能会有所不同)。

您可以尝试使用timecop gem,这有助于处理这些细节。您基本上可以冻结当前时间,创建任何时间相关的数据或比较值,并根据您的期望使用这些值。

最后,请确保您正在比较正确的时区和日期或时间数据类型。您可能希望查看Ruby的Time和Date类的文档,以及是否使用Rails,TimeWithZone类。在时区比较之间遇到问题非常常见,因此您希望始终使用一致的数据类型进行这些比较(即,不要将Date.todayTime.now1.day.ago进行比较,因为这些可能都会使用不同的时区)。关于这个主题有很多博客文章,所以我建议您阅读有关比较Ruby中的时间值的内容。

它可以帮助打开一个Ruby控制台,并尝试使用不同的方法来生成时间值,这样你就可以了解哪个表达式默认为你当前的系统时区,它将使用GMT等。最后,确保您使用一个一致的数据类型和模式(即相同的时区)在整个测试套件中生成时间值。