我最近尝试在我的代码仓库中升级Rails(至v5.2.2
),其中两个在升级后未能通过单元测试。在深入研究并逐行比较Gemfile.lock
的失败版本和工作版本之后,我发现升级activestorage
(v5.2.1
-> 5.2.2
)是元凶,我能够复制并反转它。似乎已经引入了一个问题(至少对于测试而言;我没有亲自使用代码看到此问题),其中测试套件无法在.click
事件之后获取元素属性更新。有人也遇到过吗?可能是个错误吗?
这是我收到的错误消息的示例:
1) Notifications notifications drawer when clicking the nav will open the drawer
Failure/Error: expect(page).to have_selector('.notifications-drawer', visible: true)
expected to find visible css ".notifications-drawer" but there were no matches. Also found "View all notifications", which matched the selector but not all filters.
# ./spec/features/notifications_spec.rb:88:in `block (4 levels) in <top (required)>'
2) Notifications mark notification as read behavior when a notification is loaded will be marked as read after clicked
Failure/Error: expect(page).to have_css('.notification.read')
expected to find css ".notification.read" but there were no matches
# ./spec/features/notifications_spec.rb:140:in `block (4 levels) in <top (required)>'
以下是升级后失败的两个测试:
context 'when clicking the nav' do
before do
find('.notifications-drawer-link').click
end
it 'will open the drawer' do # line 87
expect(page).to have_selector('.notifications-drawer', visible: true)
end
it 'will have a link to all notifications' do
expect(page).to have_selector('.notifications-drawer-link')
end
end
context 'when a notification is loaded' do
it 'will initially be marked as unread' do
expect(page).to have_css('.notification.unread')
end
it 'will be marked as read after clicked' do # line 137
notify_element = '[data-notify-id="' + mock_notifications[:items][0][:id] + '"]'
page.find(notify_element).find('.notifications-date-stamp').trigger("click")
expect(page).to have_css('.notification.read')
end
end