Покрытие кода istanbul js с функцией обратного вызова, как в removeEventListener - PullRequest
2 голосов
/ 03 марта 2020

Стамбул js не сообщает правильно покрытие кода в случае функции обратного вызова, как в этом примере:

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));
  });

1 Ответ

1 голос
/ 03 марта 2020

Я только что сохранил в отдельной функции функцию обратного вызова, чтобы исправить отчет о покрытии кода в Стамбуле js.

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);
  });
...