Nic*_*ick 15 ruby integration-testing ruby-on-rails ruby-on-rails-4
在控制器方法中,我将用户的变量设置为activation_sent_at
等于Time.zone.now
向该用户发送激活电子邮件的时间.在开发服务器上,这似乎有效(尽管我的应用程序中的时间表达式在我的计算机的本地时间落后2小时).
我想要包含一个集成测试,测试是否activation_sent_at
确实设置得当.所以我加入了这条线:
assert_equal @user.activation_sent_at, Time.zone.now
Run Code Online (Sandbox Code Playgroud)
但是,这会产生错误:
No visible difference in the ActiveSupport::TimeWithZone#inspect output.
You should look at the implementation of #== on ActiveSupport::TimeWithZone or its members.
Run Code Online (Sandbox Code Playgroud)
我认为它建议Time.zone.now
在我的测试中使用另一个表达式.我查看了不同的来源,包括http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html,但我不知道该怎么做.什么可能导致此错误的任何建议?
附加信息:添加puts Time.zone.now
并puts @stakeholder.activation_sent_at
确认两者相等.不确定是什么导致失败/错误.
AbM*_*AbM 30
问题是两个日期彼此非常接近但不一样.您可以使用assert_in_delta
assert_in_delta @user.activation_sent_at, Time.zone.now, 1.second
对于RSpec,类似的方法是使用be_within
:
expect(@user.activation_sent_at).to be_within(1.second).of Time.zone.now
归档时间: |
|
查看次数: |
2580 次 |
最近记录: |