首页 > 解决方案 > 带有回调函数的代码覆盖 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));
  });

标签: typescriptjasminekarma-runneristanbul

解决方案


我只是将回调函数保存在一个单独的函数中,以修复 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);
  });

推荐阅读