代码覆盖率istanbuljs带有回调函数,类似于removeEventListener



istanbuljs在回调函数的情况下不会正确报告代码覆盖率,如本例所示:

obj.removeEventListener('unload', () => this.dispose());

测试用例:

it('dispose call removeEventListener', async() => {
spyOn(obj, 'removeEventListener');
obj.dispose();
expect(obj['removeEventListener']).toHaveBeenCalledTimes(1);
expect(obj['removeEventListener']).toHaveBeenCalledWith('unload', jasmine.any(Function));
});

我刚刚在一个单独的函数中保存了回调函数,以修复istanbuljs代码覆盖率报告。

obj.callDispose = () => { this.dispose() }; // obj.dispose();
obj.removeEventListener('unload', this.callDispose);  // obj.callDispose

测试用例:

it('dispose call removeEventListener', async() => {
spyOn(obj, 'removeEventListener');
obj.dispose();
expect(obj['removeEventListener']).toHaveBeenCalledTimes(1);
expect(obj['removeEventListener']).toHaveBeenCalledWith('unload', obj.callDispose);
});

最新更新