在AngularJS中测试$interval被触发3次
Testing that an $interval gets fired 3 times in AngularJS
我有一个AngularJS服务,看起来像这样(我已经删除了不相关的代码):
myApp.factory('myService', ['$interval', function ($interval) {
return {
startWatch: function(onSuccess) {
var watcher = $interval(onSuccess, 250);
return watcher;
},
stopWatch: function(watcher) {
$interval.cancel(watcher);
}
};
}]);
要测试此服务,我有以下内容:
describe('myApp', function() {
beforeEach(function() {
module('myApp');
});
describe('myService', function () {
var myService = null;
beforeEach(inject(function (myService) {
myService = myService;
}));
it('should run successfully 3 times', function() {
var count = 0;
var w = myService.startWatch(function() {
count = count + 1;
console.log('fired ' + count + ' times.');
});
});
});
});
当测试运行时,它只运行一次。我不明白如何实际测试1。区间片段2。它被触发的次数。服务中会有随时间变化的信息。我想测试信息是否符合预期。出于这个原因,我试图在一段时间内测试一些东西。我该怎么做呢?
谢谢你的帮助!
Try $interval.flush(millis):
describe('myApp', function() {
beforeEach(function() {
module('myApp');
});
describe('myService', function () {
var myService = null;
var $interval = null;
beforeEach(inject(function (myService) {
myService = myService;
$interval = _$interval_;
}));
it('should run successfully 3 times', function() {
var count = 0;
var w = myService.startWatch(function() {
count = count + 1;
});
$interval.flush(751); // greater than 250 * 3
expect(count).toEqual(3);
});
});
});
记住在你的测试中引用angular mock: http://code.angularjs.org/1.2.0/angular-mocks.js .该版本应该与你的angular版本相同。
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- Javascript html每点击一次就会更改url
- /undefined在我的404错误日志中多次出现
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Google Adsense多次加载脚本
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- ScriptManager.RegisterStartupScript保持多次添加脚本块
- Meteor Router数据函数被调用两次
- 创建要多次使用的函数
- 多次发射多个可观察器的问题
- jQuery滚动功能只工作一次
- 函数中的Interval被调用数百次
- AJAX 新 XMLHttpRequest at Interval 不触发多次
- 在AngularJS中测试$interval被触发3次
- $interval在Angular中会在重复2次后停止工作
- 如何运行这个angular $interval函数3次(3个循环)
- JavaScript/jQuery interval在ie浏览器中执行两次
- 如何在第一次运行时不延迟地使用$interval