Lan*_*ard 4 ruby ruby-on-rails
我想为应用程序创建测试数据,并且有很多time_at属性被跟踪,太多而无法以可维护的方式覆盖.我在想的是,我可以在Ruby中更改基准参考时间变量吗?
这将使得它如此created_at,updated_at,last_login_at,等,可以设置为人工时间,所以我可以在测试中做到这一点:
Date.today #=> Thu, 30 Dec 2010
Time.system_time_offset = 1.week.ago # made up
Date.today #=> Thu, 23 Dec 2010
Time.now #=> Thu Dec 23 14:08:38 -0600 2010
user_1 = User.create!
user_1.created_at #=> Thu Dec 23 14:08:38 -0600 2010
Time.reset_system_time # made up
user_2 = User.create!
user_1.created_at #=> Thu Dec 30 14:08:38 -0600 2010
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
Timecop就是一个很好的选择:https : //github.com/travisjeffery/timecop。
您可以非常轻松地冻结时间或更改时间(持续进行时间)。
例如
Time.now
# => 2014-03-14 13:17:02 -0400
Timecop.travel 2.hours.ago
Time.now
# => 2014-03-14 11:17:04 -0400
Run Code Online (Sandbox Code Playgroud)
它比mocha解决方案更好,因为所有时间功能都将受到同等的影响,因此您将无法测试Time.now返回的内容是否不同于DateTime.now。
它也比另一个答案中建议的时间扭曲的宝石更新。
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |