Ich habe eine Funktion innerhalb einer meiner Winkel Dienste, die Ich mag würde immer wieder in regelmäßigen Abständen aufgerufen werden. Ich würde das gerne mit $ timeout machen. Es sieht etwa so aus:
var interval = 1000; // Or something
var _tick = function() {
$timeout(function() {
doStuff();
_tick();
}, interval);
};
_tick();
ich, wie man Unit-Test zur Zeit mit Jasmin diese ratlos bin - Wie kann ich das tun? Wenn ich $timeout.flush()
verwende, dann treten die Funktionsaufrufe auf unbestimmte Zeit auf. Wenn ich Jasmins Scheinuhr benutze, scheint $timeout
davon unberührt zu sein. Grundsätzlich, wenn ich diese Arbeit zu bekommen, sollte ich gut zu gehen:
describe("ANGULAR Manually ticking the Jasmine Mock Clock", function() {
var timerCallback, $timeout;
beforeEach(inject(function($injector) {
$timeout = $injector.get('$timeout');
timerCallback = jasmine.createSpy('timerCallback');
jasmine.Clock.useMock();
}));
it("causes a timeout to be called synchronously", function() {
$timeout(function() {
timerCallback();
}, 100);
expect(timerCallback).not.toHaveBeenCalled();
jasmine.Clock.tick(101);
expect(timerCallback).toHaveBeenCalled();
});
});
Diese beiden Varianten arbeiten, aber mir nicht helfen:
describe("Manually ticking the Jasmine Mock Clock", function() {
var timerCallback;
beforeEach(function() {
timerCallback = jasmine.createSpy('timerCallback');
jasmine.Clock.useMock();
});
it("causes a timeout to be called synchronously", function() {
setTimeout(function() {
timerCallback();
}, 100);
expect(timerCallback).not.toHaveBeenCalled();
jasmine.Clock.tick(101);
expect(timerCallback).toHaveBeenCalled();
});
});
describe("ANGULAR Manually flushing $timeout", function() {
var timerCallback, $timeout;
beforeEach(inject(function($injector) {
$timeout = $injector.get('$timeout');
timerCallback = jasmine.createSpy('timerCallback');
}));
it("causes a timeout to be called synchronously", function() {
$timeout(function() {
timerCallback();
}, 100);
expect(timerCallback).not.toHaveBeenCalled();
$timeout.flush();
expect(timerCallback).toHaveBeenCalled();
});
});
Vielen Dank im Voraus!
Versuchen '$ rootScope' Injektion und ruft' $ rootScope. Anwenden $() 'nach der Uhr nach vorne schieben. –