QUnit.on()
добавлено в версии: 2.2.0.
Описание
QUnit.on( eventName, callback )
Регистрирует функцию обратного вызова, которая будет вызвана после возникновения указанного события.
Этот эмиттер событий — основной интерфейс для репортёров QUnit, плагинов и поддержки непрерывной интеграции. Он основан на стандарте CRI js-reporters и включает API репортера.
| тип | параметр | описание |
|---|---|---|
string | eventName | Имя события. |
Function | callback | Функция обратного вызова. |
Событие runStart
Событие runStart указывает на начало запуска тестов. Оно возникает ровно один раз и перед всеми остальными событиями.
Object | testCounts | Сводные данные о тестах. |
number | testCounts.total | Общее количество зарегистрированных тестов. |
QUnit.on('runStart', runStart => {
console.log(`Test plan: ${runStart.testCounts.total}`);
});
Событие suiteStart
Событие suiteStart указывает на начало модуля. Впоследствии за ним последует соответствующее событие suiteEnd.
string | name | Имя модуля. |
Array<string> | fullName | Список из одной или нескольких строк, содержащих (по порядку) имена всех родительских модулей и имя текущего модуля. |
QUnit.on('suiteStart', suiteStart => {
console.log('suiteStart', suiteStart);
// name: 'my module'
// fullName: ['grandparent', 'parent', 'my module']
});
Событие suiteEnd
Событие suiteEnd указывает на завершение модуля. Оно возникает после соответствующего события suiteStart.
string | name | Имя модуля. |
Array<string> | fullName | Список из одной или нескольких строк, содержащих (по порядку) имена всех родительских модулей и имя текущего модуля. |
string | status | Сводный результат тестов в этом модуле, один из следующих:failed: по крайней мере один тест завершился неудачно; passed: неудачных тестов не было, то есть все тесты завершились успешно, были пропущены или имели статус todo. |
number | runtime | Продолжительность выполнения модуля в миллисекундах. |
QUnit.on('suiteEnd', suiteEnd => {
console.log(suiteEnd);
// …
});
Событие testStart
Событие testStart указывает на начало теста. Впоследствии за ним последует соответствующее событие testEnd.
string | name | Имя теста. |
string|null | moduleName | Модуль, к которому относится тест, или null для глобального теста. |
Array<string> | fullName | Список (по порядку) имён всех родительских модулей и имени самого теста. |
QUnit.on('testStart', testStart => {
console.log(testStart);
// name: 'my test'
// moduleName: 'my module'
// fullName: ['parent', 'my module', 'my test']
// name: 'global test'
// moduleName: null
// fullName: ['global test']
});
Событие testEnd
Событие testEnd указывает на завершение теста. Оно возникает после соответствующего события testStart.
Свойства объекта testEnd:
string | name | Имя теста. |
string|null | moduleName | Модуль, к которому относится тест, или null для глобального теста. |
Array<string> | fullName | Список (по порядку) имён всех родительских модулей и имени самого теста. |
string | status | Результат теста, один из следующих:passed: все проверки пройдены или проверок не обнаружено;failed: по крайней мере одна проверка завершилась неудачно или это тест todo, в котором больше нет неудачных проверок;skipped: тест намеренно не запускался; илиtodo: тест имеет статус «todo» и содержит неудачную проверку. |
number | runtime | Продолжительность выполнения теста в миллисекундах. |
Array<FailedAssertion> | errors | Для тестов со статусом failed или todo будет как минимум одна неудачная проверка. Однако список может быть пустым, если статус failed присвоен тесту «todo», в котором нет неудачных проверок.Обратите внимание: все отрицательные результаты тестов передают сведения о них таким образом. Например, тайм-ауты, неперехваченные ошибки и загрязнение глобальной области видимости также создают неудачную проверку. |
Свойства объекта FailedAssertion:
boolean | passed | false для неудачной проверки. |
string|undefined | message | Описание того, что проверялось. |
any | actual | Фактическое значение, переданное в проверку. |
any | expected | Ожидаемое значение, переданное в проверку. |
string|undefined | stack | Трассировка стека; может быть не определена, если результат получен в старом браузере. |
QUnit.on('testEnd', testEnd => {
if (testEnd.status === 'failed') {
console.error('Failed! ' + testEnd.fullName.join(' > '));
testEnd.errors.forEach(assertion => {
console.error(assertion);
// message: speedometer
// actual: 75
// expected: 88
// stack: at dmc.test.js:12
});
}
});
Событие runEnd
Событие runEnd указывает на завершение запуска тестов. Оно возникает ровно один раз.
Событие runEnd обладает памятью (начиная с QUnit 2.24.0). Это означает, что можно подписаться на это событие, даже если оно уже возникло. Например, если вы создаёте систему интеграции, которая автоматизирует запуск тестов в браузере, и не можете надёжно добавить обработчик до завершения тестов. Вы можете добавить обработчик события runEnd позже. В этом случае он будет вызван немедленно. Это избавляет от необходимости разбирать HTML.
string | status | Сводный результат всех тестов, один из следующих:failed: по крайней мере один тест завершился неудачно или произошла глобальная ошибка;passed: неудачных тестов не было, то есть все тесты завершились успешно, были пропущены или имели статус todo. Если параметр QUnit.config.failOnZeroTests отключён, запуск также может завершиться успешно, если тестов не было. |
Object | testCounts | Сводные данные о тестах: |
number | testCounts.passed | Количество успешно пройденных тестов. |
number | testCounts.failed | Количество неудачных тестов. |
number | testCounts.skipped | Количество пропущенных тестов. |
number | testCounts.todo | Количество тестов todo. |
number | testCounts.total | Общее количество тестов, равное сумме указанных выше свойств. |
number | runtime | Общая продолжительность запуска в миллисекундах. |
QUnit.on('runEnd', runEnd => {
console.log(`Passed: ${runEnd.passed}`);
console.log(`Failed: ${runEnd.failed}`);
console.log(`Skipped: ${runEnd.skipped}`);
console.log(`Todo: ${runEnd.todo}`);
console.log(`Total: ${runEnd.total}`);
});
Событие error
Добавлено в версии: QUnit 2.17.0.
Событие error уведомляет плагины о неперехваченных глобальных ошибках во время запуска тестов.
См. также QUnit.onUncaughtException() — с его помощью можно сообщать о собственных неперехваченных ошибках.
Событие error обладает памятью (начиная с QUnit 2.24.1). Это означает, что можно подписаться на это событие, даже если оно уже возникло. Это повышает надёжность репортёров в системах автоматизации браузеров, где бывает трудно надёжно добавить обработчик между qunit.js и любым другим кодом.
Error|any | error |
QUnit.on('error', error => {
console.error(error);
});
API репортера
Интерфейс командной строки QUnit принимает параметр --reporter, который загружает репортёр из модуля Node (например, пакета npm). Такой модуль должен экспортировать функцию init, которую вызовет QUnit и которой передаст объект QUnit; затем с его помощью можно вызвать QUnit.on(). Этот контракт называется API репортера.
Репортёр можно реализовать как обычную экспортируемую функцию или как класс со статическим методом init.
Пример: класс репортера
class MyReporter {
static init (QUnit) {
return new MyReporter(QUnit);
}
constructor (QUnit) {
QUnit.on('error', this.onError.bind(this));
QUnit.on('testEnd', this.onTestEnd.bind(this));
QUnit.on('runEnd', this.onRunEnd.bind(this));
}
onError (error) {
}
onTestEnd (testEnd) {
}
onRunEnd (runEnd) {
}
}
// CommonJS, or ES Module
module.exports = MyReporter;
export default MyReporter;
Пример: функция репортера
function init (QUnit) {
QUnit.on('error', onError);
QUnit.on('testEnd', onTestEnd);
QUnit.on('runEnd', onRunEnd);
function onError (error) {
}
function onTestEnd (testEnd) {
}
function onRunEnd (runEnd) {
}
}
// CommonJS, or ES Module
module.exports.init = init;
export default { init };
© OpenJS Foundation and contributors.
Licensed under the MIT license.
https://qunitjs.com/api/callbacks/QUnit.on