chai-eventemitter2

これは、nodeスタイルのEventEmittersをテストするためのchaiプラグインです。

互換性

  • 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