我正在尝试使用 Karma 与 Jasmine 测试我的 AngularJS 控制器。但一个$timeout
这在现实生活中运行良好,但却使我的测试崩溃。
控制器:
var Ctrl = function($scope, $timeout) {
$scope.doStuff = function() {
$timeout(function() {
$scope.stuffDone = true;
}, 250);
};
};
茉莉花它块(其中$scope
和控制器已正确初始化):
it('should do stuff', function() {
runs(function() {
$scope.doStuff();
});
waitsFor(function() {
return $scope.stuffDone;
}, 'Stuff should be done', 750);
runs(function() {
expect($scope.stuffDone).toBeTruthy();
});
});
当我在浏览器中运行我的应用程序时,$timeout
函数将被执行并且$scope.stuffDone
将会是真的。但在我的测试中,$timeout
不执行任何操作,该函数永远不会执行,并且 Jasmine 在超时 750 毫秒后报告错误。这里可能出了什么问题?
根据 Angular JS 文档$timeout http://docs.angularjs.org/api/ng.%24timeout, 您可以使用$timeout.flush()
同步刷新延迟函数队列。
尝试将您的测试更新为:
it('should do stuff', function() {
expect($scope.stuffDone).toBeFalsy();
$scope.doStuff();
expect($scope.stuffDone).toBeFalsy();
$timeout.flush();
expect($scope.stuffDone).toBeTruthy();
});
这里有一个plunker http://embed.plnkr.co/exO5AESD6st4VaAVcfRH/preview显示您的原始测试失败和新测试通过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)