Ich kann nicht scheinen setTimeout
und clearTimeout
in meinen Jasmine Tests auszuspionieren, die durch Karma laufen.Spion auf setTimeout und clearTimeout in Karma und Jasmine
I Variationen über alle diese
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 jedem Fall versucht haben, kann ich bestätigen, dass setTimeout
und clearTimeout
haben in runMyCode
aufgerufen, sondern immer Expected spy setTimeout to have been called.
Für window
, bekomme ich deutlich Das liegt daran, dass der Test und der Runner (das Karma-Fenster) sich in verschiedenen Frames befinden (warum sollte ich etwas anderes erwarten). Aus diesem Grund kann ich keine Bestätigung dafür finden, dass diese globalen Funktionen aufgerufen wurden.
Ich weiß, dass ich jasmine.clock()
verwenden kann, um zu bestätigen, dass Timeout/Intervall Callbacks aufgerufen wurden, aber es sieht so aus, als ob ich setTimeout
selbst nicht ansehen kann. Und bestätigen, dass clearTimeout
einfach aufgerufen wurde, ist nicht möglich.
An dieser Stelle ist das einzige, was ich denken kann, eine separate Abstraktionsschicht zu Wrap setTimeout
und clearTimeout
hinzuzufügen oder die Funktionen als Abhängigkeiten zu injizieren, was ich vorher getan habe, aber ich denke, ist seltsam.