Non riesco a essere in grado di spiare setTimeout
e clearTimeout
nei miei test di Jasmine, che vengono eseguiti attraverso Karma.Spia su setTimeout e clearTimeout in Karma e Jasmine
ho provato variazioni su tutto questo
spyOn(window, 'setTimeout').and.callFake(()=>{});
spyOn(global, 'setTimeout').and.callFake(()=>{});
spyOn(window, 'clearTimeout').and.callThrough();
clock = jasmine.clock();
clock.install();
spyOn(clock, 'setTimeout').and.callThrough();
runMyCode();
expect(window.setTimeout).toHaveBeenCalled(); // no
expect(global.setTimeout).toHaveBeenCalled(); // nope
expect(window.clearTimeout).toHaveBeenCalled(); // no again
expect(clock.setTimeout).toHaveBeenCalled(); // and no
In ogni caso, posso confermare che setTimeout
e clearTimeout
sono state invocate nel runMyCode
, ma invece ho sempre ottenere Expected spy setTimeout to have been called.
Per window
, chiaramente questo perché il test e il runner (la finestra di Karma) sono in frame diversi (quindi perché dovrei aspettarmi qualcosa di diverso). Ma a causa di ciò, non vedo alcun modo per confermare che queste funzioni globali siano state invocate.
So che posso usare jasmine.clock()
per confermare che i callback di intervallo/intervallo siano stati richiamati, ma sembra che non riesca a guardare lo stesso setTimeout
. E confermare che clearTimeout
è stato chiamato semplicemente non è possibile.
A questo punto, l'unica cosa che mi viene in mente è quello di aggiungere uno strato separato di astrazione per avvolgere setTimeout
e clearTimeout
o per iniettare le funzioni come dipendenze, che ho fatto prima, ma penso che è strano.