我正在尝试在我的应用中测试超时功能。
在我的控制器中
$scope.$watch('toy',function(toyVar){
if(toyVar == 1) {
//do stuff
} else {
$timeout(function() {
$window.alert('toy is old');
}, 3000);
}
});
测试文件。
describe('test', function () {
var ctrl, scope;
beforeEach(module('testApp'));
beforeEach(inject(function (_$controller_, _$rootScope_) {
scope = _$rootScope_.$new();
ctrl = _$controller_('toyCtrl', {
$scope: scope
});
}));
describe('test here', function() {
it('should check if timeout function works', function() {
//not sure how to write test here.
})
})
});
我不确定如何编写$timeout
部分代码的测试。任何人都可以帮我吗?非常感谢!
答案 0 :(得分:1)
你需要做几件事情,确保在这种情况下执行它的唯一方法就是看看alert
是否被解雇了。让我们看看那些东西:
$window.alert
以查看是否有人被叫。toy
设置不同于1 $digest
以便$watch
运行。flush
调用到$timeout
以模拟时间过去并运行该功能。$window.alert
是否确实运行,这意味着一切正常。类似的东西:
it('should check if timeout function works', function() {
spyOn($window, 'alert');
$scope.toy = 2;
$scope.$digest();
$timeout.flush();
expect($window.alert).toHaveBeenCalledWith('toy is old');
});
如果您真的不需要,请不要使用下划线语法。
看到它正常工作here