Spec-Zone.ru › Cypress

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)
      }
    }
  })
}

См. также

  • API перед запуском спецификации
  • API перед запуском
  • API после запуска
  • Руководство по плагинам
  • Создание плагина

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/plugins/after-spec-api

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API