Mam funkcję wewnątrz jednej z moich usług kątowych, którą chciałbym wywoływać wielokrotnie w regularnych odstępach czasu. Chciałbym to zrobić za pomocą $ timeout. Wygląda to mniej więcej tak:Testowanie jednostki Usługa kątowa korzystająca z opcji Timeout z Jockine Mock Clock
var interval = 1000; // Or something
var _tick = function() {
$timeout(function() {
doStuff();
_tick();
}, interval);
};
_tick();
jestem zakłopotany, jak ten z testów jednostkowych Jasmine w tej chwili - jak to zrobić? Jeśli używam $timeout.flush()
, wywołania funkcji pojawiają się w nieskończoność. Jeśli użyję fałszywego zegara Jasmine, to wydaje się, że nie ma to wpływu na $timeout
. Zasadniczo, jeśli mogę dostać tej pracy, powinien być dobry, aby przejść:
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();
});
});
Te dwa warianty pracy, ale nie może mi pomóc:
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();
});
});
Z góry dzięki!
Spróbuj wstrzykiwanie '$ rootScope' i wywołanie' $ rootScope. Zastosować $() 'po naciśnięciu zegara do przodu. –