chai-eventemitter2

这是一个用于测试 node 样式 EventEmitterschai 插件。

兼容性

  • ECMAScript 2020 (Node.js 14+)

安装

  1. 安装插件

    • 使用 NPM

        npm install -D chai-eventemitter2
      
    • 使用 Yarn

        yarn add -D chai-eventemitter2
      
  2. 在你的测试设置中添加以下内容

     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。 (即它必须是一个具有 onemit 方法的对象,等等。)

请参阅 用法 部分中的示例。

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