Я только что сохранил в отдельной функции функцию обратного вызова, чтобы исправить отчет о покрытии кода в Стамбуле 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);
});