Как мне добавить дополнительные данные в сбои Cypress?

#javascript #cypress #browser-testing

#javascript #cypress #тестирование браузера

Вопрос:

Я хотел бы регистрировать дополнительные данные при сбое тестового примера. Куда я могу лучше всего вставить свой пользовательский обработчик ошибок?

Например:

 cy.get('something')
  .should('have.property', 'blah')
  

Когда это не удается на панели инструментов Cypress, я получаю:

 CypressError: Timed out retrying: expected 'something' to have a property 'blah'
  at Object.cypressErr (https://my.website.com/__cypress/runner/cypress_runner.js:65727:11)
  at Object.throwErr (https://my.website.com/__cypress/runner/cypress_runner.js:65692:18)
  at Object.throwErrByPath (https://my.website.com/__cypress/runner/cypress_runner.js:65719:17)
  at retry (https://my.website.com/__cypress/runner/cypress_runner.js:59237:16)
  at https://my.website.com/__cypress/runner/cypress_runner.js:51312:18
  at tryCatcher (https://my.website.com/__cypress/runner/cypress_runner.js:131273:23)
  at Promise._settlePromiseFromHandler (https://my.website.com/__cypress/runner/cypress_runner.js:129291:31)
  at Promise._settlePromise (https://my.website.com/__cypress/runner/cypress_runner.js:129348:18)
  at Promise._settlePromise0 (https://my.website.com/__cypress/runner/cypress_runner.js:129393:10)
  at Promise._settlePromises (https://my.website.com/__cypress/runner/cypress_runner.js:129468:18)
  at Async._drainQueue (https://my.website.com/__cypress/runner/cypress_runner.js:126197:16)
  at Async._drainQueues (https://my.website.com/__cypress/runner/cypress_runner.js:126207:10)
  at Async.drainQueues (https://my.website.com/__cypress/runner/cypress_runner.js:126081:14)
  at <anonymous>
  

Что я могу сделать, чтобы настроить эту ошибку на что-то вроде:

 CypressError: ...

My additional logging: {foo: 'bar', etc, etc}
  

В конечном счете, я хочу зарегистрировать некоторые дополнительные контекстные данные, чтобы я мог исследовать отлаживать, почему тест может завершаться сбоем / сбоем.

Ответ №1:

Я надеюсь, что эта библиотека поможет вам — https://github.com/cypress-io/error-message

Вот суть этого,

 //Load the function from the module
const {formErrorText} = require('@cypress/error-message')

//Handle the error with custome messages
const fileSaveError = {
  description: 'We could not save an important file',
  solution: `Please check folder permissions and try again

    more details on our FAQ page: https://faq.company.name
  `
}
fs.writeFile(name)
  .catch(
    formErrorText(info).then(console.error)
  )
/*
  shows nice error message

  ------
  We could not save an important file
  Please check folder permissions and try again

    more details on our FAQ page: https://faq.company.name

  Exception message
  ------
  Platform: darwin
  Version: 15.6.2
*/  

Для получения дополнительной информации вы можете проверить этот блог — https://www.cypress.io/blog/2017/07/26/good-error-messages/#Useful-E2E-assertion-failures

Редактировать 1:

Как указано в комментарии, если вы ищете способы обработки таинственных сбоев, я бы посоветовал вам взглянуть на механизм обработки событий Cypress. Вот выдержка из него,

 // likely want to do this in a support file
// so it's applied to all spec files
// cypress/support/index.js

Cypress.on('uncaught:exception', (err, runnable) => {
  // Handle your logging logic here
})
  

Комментарии:

1. Спасибо! Я попробую и сообщу, если это сработает!

2. Как бы вы прикрепили это к Cypress? Я не думаю, что он предлагает catch в своих цепочках.

3. Этот плагин предлагает обработку ошибок; просил бы вас следовать документу, упомянутому в решении.

4. Если я не ошибаюсь, библиотека выглядит так, как будто она добавляет пользовательские сообщения об ошибках к обычным ошибкам. Как это работает в тесте Cypress? Пример для стандарта try/catch . Моя цель — добавить дополнительный контекст ошибки при сбое Cypress. В настоящее время я не могу получить эту информацию на панели мониторинга, и я надеюсь напечатать больше информации о загадочном сбое теста.

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