Таинственные ошибки rspec после обновления Rails - PullRequest
0 голосов
/ 07 января 2019

Я недавно пытался обновить 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
...