Rspec System Test проходит при запуске по отдельности, не проходит при запуске со всем пакетом - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующий тест, который проходит, когда я запускаю его изолированно:

require 'rails_helper'

RSpec.describe 'deleting a non-recurring user event', js: true do

  let(:user)       { create(:proofreader_user) }
  let(:date)       { Date.current.strftime('%Y-%m-%d') }
  let(:date_time)  { date + ' 00:00'}

  it 'deletes the event' do
    visit root_path
    click_on "Login"
    fill_in  "Email",    with: user.email
    fill_in  "Password", with: user.password
    click_on "Sign In"
    visit calendar_path
    expect(current_path).to eq(calendar_path)
    expect(page).to have_css("#complete_registration:disabled")
    expect(page).to_not have_css("td.fc-event-container")
    find("td.fc-day[data-date='#{date}']").click
    expect(page).to have_css("div#user-event-modal")
    expect(page).to have_select('user_event[title]', :options => UserEvent.titles.keys)
    expect(find('input', id: 'user_event_starting').value).to eq date_time
    expect(find('input', id: 'user_event_ending').value).to eq date_time
    page.execute_script("$('input#user_event_starting').val('#{date} 09:00')")
    expect(find('input', id: 'user_event_starting').value).to eq date + ' 09:00'
    page.execute_script("$('input#user_event_ending').val('#{date} 12:00')")
    expect(find('input', id: 'user_event_ending').value).to eq date + ' 12:00'
    click_on 'Save'
    expect(page).to have_css("td.fc-event-container a.fc-day-grid-event")
    expect(page).to have_css("span.fc-time", text: '9a - 12p')
    expect(page).to have_css("span.fc-title", text: 'work')
    find("span.fc-time", text: '9a - 12p').click
    expect(page).to have_css("div#user-event-modal")
    find("#del_one_event").click
    within('.swal2-actions') { click_button('Yes') }
    wait_for { page }.to_not have_css("div#user-event-modal")
    expect(page).to_not have_css("td.fc-event-container")
    expect(page).to_not have_css("span.fc-time", text: '10a - 14p')
  end
end

Однако, когда я запускаю все тесты, я получаю следующую ошибку:

Failure/Error: within('.swal2-actions') { click_button('Yes') }

     Capybara::ElementNotFound:
       Unable to find visible css ".swal2-actions"

Почему этот тест не проходит, когда я запускаю его вместе с другим тестом, и как я могу это исправить, чтобы он прошел, когда я запускаю все тесты?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Невозможно быть уверенным без гораздо большей информации.Было бы лучше, если бы вы могли создать и опубликовать минимально завершенный проверяемый пример .

На основании предоставленной информации, я бы предположил, что тест, который не пройден при запуске с другими тестами, не являетсяправильно изолированы.Другие примеры изменяют состояние приложения, вызывая сбой этого теста.Так что посмотрите на ваши before и after хуки и убедитесь, что вы устанавливаете config.use_transactional_fixtures = true в rails_helper.rb

Если существует возможность задержки между временем нажатия #del_one_event иПоявится .swal2-actions, затем измените

within('.swal2-actions') { click_button('Yes') }

на

find('.swal2-actions').click_button('Yes')

Если ни одна из них не устранит проблему, возможно, у вас проблема с кэшированием браузера , ноэто еще сложнее отладить.

0 голосов
/ 20 февраля 2019

Трудно ответить, не видя других тестов.Но я заметил некоторые моменты, которые стоит проверить:

  • вы создаете данные с помощью навигации по приложению, возможно, другие тесты создают данные, которые препятствуют созданию данных в этом тесте
  • Команда find("#del_one_event").click (за одну строку до этого) просто выполняет щелчок, но не ждет, пока ничего не произойдет.Со всеми тестами и дополнительными данными в БД может потребоваться больше времени, пока не появится .swal2-actions, и он еще не появится, когда вы выполните within('.swal2-actions') { click_button('Yes') }

Еще один способ приблизиться к ошибкеделая скриншоты и сравнивая их.Проверьте драгоценный камень капибара-скриншот

...