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