Mocha 允许您定义和使用通过 npm
安装的自定义报告器。
例如,如果 mocha-foo-reporter
已发布到 npm 注册表,您可以通过 npm install mocha-foo-reporter --save-dev
安装它,然后通过 mocha --reporter mocha-foo-reporter
使用它。
自定义报告器示例
如果您希望快速入门,这里有一个自定义报告器的示例
// my-reporter.js
'use strict';
const Mocha = require('mocha');
const {
EVENT_RUN_BEGIN,
EVENT_RUN_END,
EVENT_TEST_FAIL,
EVENT_TEST_PASS,
EVENT_SUITE_BEGIN,
EVENT_SUITE_END
} = Mocha.Runner.constants;
// this reporter outputs test results, indenting two spaces per suite
class MyReporter {
constructor(runner) {
this._indents = 0;
const stats = runner.stats;
runner
.once(EVENT_RUN_BEGIN, () => {
console.log('start');
})
.on(EVENT_SUITE_BEGIN, () => {
this.increaseIndent();
})
.on(EVENT_SUITE_END, () => {
this.decreaseIndent();
})
.on(EVENT_TEST_PASS, test => {
// Test#fullTitle() returns the suite name(s)
// prepended to the test title
console.log(`${this.indent()}pass: ${test.fullTitle()}`);
})
.on(EVENT_TEST_FAIL, (test, err) => {
console.log(
`${this.indent()}fail: ${test.fullTitle()} - error: ${err.message}`
);
})
.once(EVENT_RUN_END, () => {
console.log(`end: ${stats.passes}/${stats.passes + stats.failures} ok`);
});
}
indent() {
return Array(this._indents).join(' ');
}
increaseIndent() {
this._indents++;
}
decreaseIndent() {
this._indents--;
}
}
module.exports = MyReporter;
要使用此报告器,请执行 mocha --reporter /path/to/my-reporter.js
。
有关更多示例,内置报告器实现是 最佳参考位置。 集成测试 也可能有所帮助。
Base
报告器类
Base 是一个“抽象”类。它包含特定于控制台的设置和实用程序,通常由内置报告器使用。浏览内置报告器实现时,您可能会经常看到对 Base 的静态属性的引用。
对于自定义报告器扩展 Base 通常很有用,但并非必需。
统计信息
Mocha 将 stats
属性(类型为 StatsCollector)添加到报告器的 Runner
实例(作为第一个参数传递给构造函数)。
事件
报告器应监听从 runner
(Runner 的单例实例)发出的事件。
事件名称从 Mocha.Runner
的 constants
属性导出
常量 | 事件名称 | 事件参数 | 描述 |
---|---|---|---|
EVENT_RUN_BEGIN | 开始 | (n/a) | 执行将开始。 |
EVENT_RUN_END | 结束 | (n/a) | 所有 套件、测试 和 钩子 已完成执行。 |
EVENT_DELAY_BEGIN | 等待 | (n/a) | 等待 global.run() 被调用;仅在 延迟 选项为 true 时发出。 |
EVENT_DELAY_END | 准备就绪 | (n/a) | 用户调用了 global.run() ,根套件已准备好执行。 |
EVENT_SUITE_BEGIN | 套件 | 套件 | 将执行 钩子 和 测试,包括任何嵌套的 套件。 |
EVENT_SUITE_END | 套件结束 | 套件 | 钩子、测试 和 套件 内的嵌套 套件 已完成执行。 |
EVENT_HOOK_BEGIN | 钩子 | 钩子 | 将执行 钩子。 |
EVENT_HOOK_END | 钩子结束 | 钩子 | 钩子 已完成执行。 |
EVENT_TEST_BEGIN | 测试 | 测试 | 将执行 测试。 |
EVENT_TEST_END | 测试结束 | 测试 | 测试 已完成执行。 |
EVENT_TEST_FAIL | 失败 | 测试 、错误 | 测试 失败或抛出异常。 |
EVENT_TEST_PASS | 通过 | 测试 | 测试 已通过。 |
EVENT_TEST_PENDING | 待定 | 测试 | 测试 被跳过。 |
EVENT_TEST_RETRY | 重试 | 测试 、错误 | 测试 失败,但即将重试;仅在 retry 选项不为零时发出。 |
请使用这些常量,而不是您自己的报告器中的事件名称!这将确保与 Mocha 的未来版本兼容。
重要的是要了解,所有
Suite
回调将在 Runner 发出EVENT_RUN_BEGIN
之前 运行。钩子和测试将在 Runner 发出EVENT_RUN_BEGIN
之后 运行。