API после запуска спецификаций
Событие after:spec срабатывает после выполнения файла спецификации. При запуске Cypress через cypress open, событие сработает при закрытии браузера.
Синтаксис
⚠️ Этот код является частью файла плагинов и, следовательно, выполняется в среде Node.js. В этом файле нельзя вызывать команды
Cypressилиcy, но у вас есть прямой доступ к файловой системе и остальной операционной системе.
⚠️ При запуске через
cypress open, событиеafter:specсрабатывает только в том случае, если включён флаг experimentalInteractiveRunEvents.
on('after:spec', (spec, results) => {
/* ... */
})
spec (Объект)
Подробная информация о файле спецификации, включая следующие свойства:
| Свойство | Описание |
|---|---|
name |
Основное имя файла спецификации (например, login_spec.js) |
relative |
Путь к файлу спецификации, относительно корня проекта (например, cypress/integration/login_spec.js) |
absolute |
Абсолютный путь к файлу спецификации (например, /Users/janelane/my-app/cypress/integration/login_spec.js) |
results (Объект)
Подробные результаты выполнения файла спецификации, включая количество успешных/неуспешных тестов и детали по самим тестам.
Результаты предоставляются только при запуске через cypress run. При запуске через cypress open, результаты будут undefined.
Использование
Вы можете вернуть промис из обработчика события after:spec и он будет ожидать выполнения перед тем как Cypress продолжит обработку видео спецификации или перейдет к дальнейшим спецификациям, если таковые имеются.
Вывод относительного пути спецификации в stdout после запуска
module.exports = (on, config) => {
on('after:spec', (spec, results) => {
// spec will look something like this:
// {
// name: 'login_spec.js',
// relative: 'cypress/integration/login_spec.js',
// absolute: '/Users/janelane/my-app/cypress/integration/login_spec.js',
// }
// results will look something like this:
// {
// stats: {
// suites: 0,
// tests: 1,
// passes: 1,
// pending: 0,
// skipped: 0,
// failures: 0,
// // ...more properties
// }
// reporter: 'spec',
// tests: [
// {
// title: ['login', 'logs user in'],
// state: 'passed',
// body: 'function () {}',
// // ...more properties...
// }
// ],
// error: null,
// video: '/Users/janelane/my-app/cypress/videos/login_spec.js.mp4',
// screenshots: [],
// // ...more properties...
// }
console.log('Finished running', spec.relative)
})
}
Примеры
Удаление записанного видео, если спецификация успешна
Можно удалить записанное видео спецификации при определенных условиях. Это позволит пропустить сжатие и загрузку видео при записи на Dashboard.
В примере ниже показано, как удалить записанное видео для спецификаций без неудачных тестов.
// plugins/index.js
// need to install the "del" module as a dependency
// npm i del --save-dev
const del = require('del')
module.exports = (on, config) => {
on('after:spec', (spec, results) => {
if (results && results.stats.failures === 0 && results.video) {
// `del()` returns a promise, so it's important to return it to ensure
// deleting the video is finished before moving on
return del(results.video)
}
})
}
Удаление записанного видео, если тесты не были повторены
Можно удалить записанное видео спецификации при определенных условиях. Это позволит пропустить сжатие и загрузку видео при записи на Dashboard.
В примере ниже показано, как удалить записанное видео для спецификаций, которые не имели попыток повторного выполнения, при использовании Cypress повторных выполнений тестов.
// plugins/index.js
// need to install these dependencies
// npm i lodash del --save-dev
const _ = require('lodash')
const del = require('del')
module.exports = (on, config) => {
on('after:spec', (spec, results) => {
if (results && results.video) {
// Do we have failures for any retry attempts?
const failures = _.some(results.tests, (test) => {
return _.some(test.attempts, { state: 'failed' })
})
if (!failures) {
// delete the video if the spec passed and no tests retried
return del(results.video)
}
}
})
}
См. также
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/plugins/after-spec-api