#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. Я отредактировал свой ответ, чтобы обрабатывать неперехваченные исключения . Пожалуйста, проверьте, помогает ли это.