chai-eventemitter2
这是一个用于测试 node 样式 EventEmitters 的 chai 插件。
兼容性
- ECMAScript 2020 (Node.js 14+)
安装
-
安装插件
-
使用 NPM
npm install -D chai-eventemitter2
-
使用 Yarn
yarn add -D chai-eventemitter2
-
-
在你的测试设置中添加以下内容
const chai = require('chai'); const eventemitter2 = require('chai-eventemitter2'); chai.use(eventemitter2());
用法
使用 Expect API
const emitter = new EventEmitter();
expect(emitter).to.be.an.eventEmitter;
expect(emitter)
.to.emit('foo')
.to.emit('bar', {count: 2})
.to.emit('baz', {withArgs: ['X', 'Y', 'Z']})
.to.emit('error', {count: 0})
.on(() =>
{
emitter.emit('foo');
emitter.emit('bar');
emitter.emit('bar');
emitter.emit('baz', 'X', 'Y', 'Z');
});
API
Assertion.eventEmitter
验证断言对象是否基于其属性是 EventEmitter。 (即它必须是一个具有 on
和 emit
方法的对象,等等。)
请参阅 用法 部分中的示例。
Assertion.emit(event[, options])
注册预期事件。
event: string
事件名称。options.count: number|{min: number?, max: number?}
确定预期事件被发射的次数。 可以是固定数量或范围。 [默认=1]-
option.argsMatch: 'deep'|'exact'|'soft'
如果您将预期参数数组传递给withArgs
选项,则可以使用此选项确定实际事件参数将如何与预期值进行比较。'deep'
在withArgs
数组的元素和事件参数之间进行深度比较。'exact'
在withArgs
数组的每个元素和事件参数之间进行引用相等性比较 (===
)。-
'soft'
预期发射的事件包含在withArgs
数组中设置的参数,但忽略额外的参数。 如果数组包含对象,则在发射的事件参数中搜索对象属性,但忽略额外的属性。这是默认比较方法。
如果
withArgs
选项被省略或不是数组,则此选项将被忽略。 options.withArgs: any[]|(...any) => boolean
用于验证事件参数。 如果您传递一个数组,插件将预期事件参数与数组的值匹配。 如果您传递一个回调函数,它将使用事件的参数调用,以便您可以进行复杂的验证。
Assertion.on((EventEmitter) => undefined)
使用一个回调函数调用此方法,该回调函数带有发射事件的代码。 回调函数将被调用,并且预期它会发射所有使用 emit
注册的事件,否则测试将失败。
请参阅 用法 部分中的示例。
已知问题
- ⚠️ 它不会处理
withArgs
中的循环引用。 如果您的事件参数具有循环引用,则测试可能会中断。 - ⚠️ 它不适用于“not”标志 (
.not
)。 您可以使用count
选项解决此问题。 (即断言一个事件被发射0
次) - ⚠️ 未针对异步进行测试。
免责声明
灵感来自 fengb/chai-eventemitter。
许可证
MIT