ile zaman aşımını kullanan Birim Test Açısal Servisi Açısal servislerimden birinde düzenli aralıklarla tekrar tekrar aranmak istediğim bir fonksiyon var. Bunu $ timeout kullanarak yapmak istiyorum. - Bunu nasılUnit'sing Jasmine'in Mock Clock
var interval = 1000; // Or something
var _tick = function() {
$timeout(function() {
doStuff();
_tick();
}, interval);
};
_tick();
şu anda Yasemin ile nasıl birim test bu stumped: Bu şuna benzer? $timeout.flush()
kullanırsam, işlev çağrıları süresiz olarak gerçekleşir. Jasmine'in sahte saatini kullanırsam, $timeout
etkilenmemiş gibi görünüyor.
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();
});
});
Bu iki varyasyon çalışması, ancak bana yardım etmezsen: Bu çalışma alabilirsiniz Temelde, ben gitmek için iyi olmalıdır önceden
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();
});
});
teşekkürler!
'$ rootScope' enjekte ve' $ rootScope aramayı deneyin test etmek. $ Uygulamak() 'saati ileri iterek sonra. –