Как получить информацию об ошибках JS в rspec? - PullRequest
1 голос
/ 17 октября 2019

Конкретный тест в моем приложении Rails не выполняется на CircleCI.

В этом тесте предполагается, что вход существует. Входные данные / форма отображаются в React.

Скриншоты из провального теста выглядят так, будто компонент React просто не рендерится, возможно, это ошибка JS. Но мне трудно определить причину.

В моей локальной среде разработчика форма отображается правильно.

В моей локальной тестовой среде тест проходит успешно.

Если я подключу удаленный браузер к сборке CI, форма будет отображаться правильно.

Я пытался проверить журналы консоли браузера Chrome без монитора, но последние обновления Chrome, кажется, вызывают эту ошибку:

page.driver.browser.manage.logs.get(:browser)
Selenium::WebDriver::Error::WebDriverError:
  unexpected response, code=404, content-type="text/plain"
  unknown command: session/1595d6324fa6ae6bdc1ed885ba8c9ebf/se/log

Кто-нибудь знает, как я могу исследовать это? выпускать дальше? Есть ли более простой способ получить журналы консоли браузера из этого конкретного теста?

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Эта проблема долго вызывала у меня много головных болей. Оказалось, что это легко исправить, и большая часть проблемы заключалась в том, что я сделал предположения, которые я должен был проверить.

Локальный Я использовал последние версии Chrome и ChromeDriver.

Я думал, что я выполняю то же самое на своих сборках CI. Оказывается, в образе докера, который я использую, не использовалась последняя версия Chrome, как я ожидал, даже при ручной настройке загрузки ChromeDriver.

Я обновил образ до более поздней версии ruby, и проблема исчезла.

0 голосов
/ 17 октября 2019

Попробуйте что-то вроде этого

config.after(:each, type: :system, js: true) do
  errors = page.driver.browser.manage.logs.get(:browser)
  if errors.present?
    aggregate_failures 'javascript errrors' do
      errors.each do |error|
        expect(error.level).not_to eq('SEVERE'), error.message
        next unless error.level == 'WARNING'
        STDERR.puts 'WARN: javascript warning'
        STDERR.puts error.message
      end
    end
  end
end
...