私は定期的に繰り返し呼び出される私の角度サービスの1つの中に機能を持っています。 $ timeoutを使ってこれをしたいと思います。
var interval = 1000; // Or something
var _tick = function() {
$timeout(function() {
doStuff();
_tick();
}, interval);
};
_tick();
現時点でジャスミンで単体テストを行う方法については、私は困惑しています。どうすればよいですか? $timeout.flush()
を使用すると、関数呼び出しは無期限に発生します。ジャスミンのモッククロックを使用すると、$timeout
は影響を受けていないようです。基本的に私はこの作業を得ることができる場合、私は行くために良いことがあります:
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();
});
});
これらの2つのバリエーションは動作しますが、私を助けていない:事前に
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();
});
});
ありがとう!
をテストするためのもの。 –