Ho una funzione all'interno di uno dei miei servizi angolari che mi piacerebbe essere chiamata più volte a intervalli regolari. Mi piacerebbe farlo usando $ timeout. Sembra qualcosa di simile:
var interval = 1000; // Or something
var _tick = function() {
$timeout(function() {
doStuff();
_tick();
}, interval);
};
_tick();
stumped su come test di unità questo con Jasmine in questo momento - Come posso fare questo? Se utilizzo $timeout.flush()
, le chiamate alle funzioni si verificano indefinitamente. Se utilizzo l'orologio fittizio di Jasmine, $timeout
sembra non essere interessato. In sostanza se posso ottenere questo lavoro, dovrei essere a posto:
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();
});
});
Queste due varianti funzionano, ma non mi aiuti:
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();
});
});
Grazie in anticipo!
Prova iniettando '$ rootScope' e chiamando' $ rootScope. $ Applicare() 'dopo aver spinto l'orologio in avanti. –