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