谁能解释一下是什么原因导致这个测试随机失败?
时间格式显然不匹配,但我不明白为什么会随机发生。
我们的测试:-
# MeetingControllerTest
test 'returns correctly when page param is not set' do
30.times do |i|
Meeting.create!(
start_date: @meeting.start_date + (i + 1).days,
end_date: @meeting.end_date + (i + 1).days,
user: @meeting.user,
calendar_event_id: @meeting.calendar_event_id
)
end
get meetings_url,
params: {
summary: 'meeting',
per_page: 5,
page: nil
},
headers: { 'Authorization' => @authorization }
assert_response :success
response_body = JSON.parse(response.body)
meetings = response_body['meetings']
assert_equal((@meeting.start_date + 4.days).strftime('%FT%T.%LZ'), meetings.last['start_date'])
end
断言失败是:-
--- expected
+++ actual
@@ -1 +1 @@
-"2021-09-06T16:19:14.000Z"
+"2021-09-06T16:19:14.000+01:00"
您应该尝试assert_in_delta。替换:
assert_equal((@meeting.start_date + 4.days).strftime('%FT%T.%LZ'), meetings.last['start_date'])
:
assert_in_delta((@meeting.start_date + 4.days).strftime('%FT%T.%LZ'), meetings.last['start_date'], 1.second)
如果没有其余的代码(@meeting
是什么,控制器动作),几乎不可能帮助调试它。
如果这个测试是单独运行的,或者只是作为整个测试套件的一部分运行,这也会很有趣。这将指示是否可能存在泄漏状态。
我最好的猜测是不一致的排序或某些东西正在改变您的时区(泄漏状态)。
这是一篇很好的文章,什么会导致不稳定的测试,以及如何调试和修复它们。
https://sourcediving.com/flaky -测试- -不是随机-失败- 363 fbddc1774https://sourcediving.com/a -方法-方法- -解决-片状-测试- 92 a39162b769