带有回调函数的代码覆盖 istanbuljs,如 removeEventListener

Code coverage istanbuljs with callback function, like in 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);
  });