gpt4 book ai didi

AngularJS $timeout 函数未在我的 Jasmine 规范中执行

转载 作者:行者123 更新时间:2023-12-02 19:18:15 25 4
gpt4 key购买 nike

我正在尝试使用 Karma 与 Jasmine 测试我的 AngularJS Controller 。但是在现实生活中运行良好的 $timeout 却使我的测试崩溃了。

Controller :

var Ctrl = function($scope, $timeout) {
$scope.doStuff = function() {
$timeout(function() {
$scope.stuffDone = true;
}, 250);
};
};

Jasmine it block (其中 $scope 和 Controller 已正确初始化):

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 将为 true。但在我的测试中, $timeout 不执行任何操作,该函数永远不会执行,并且 Jasmine 在超时 750 毫秒后报告错误。这里可能出了什么问题?

最佳答案

根据 Angular JS 文档 $timeout ,您可以使用 $timeout.flush() 同步刷新延迟函数队列。

尝试将您的测试更新为:

it('should do stuff', function() {
expect($scope.stuffDone).toBeFalsy();
$scope.doStuff();
expect($scope.stuffDone).toBeFalsy();
$timeout.flush();
expect($scope.stuffDone).toBeTruthy();
});

这是一个plunker显示您的原始测试失败而新测试通过。

关于AngularJS $timeout 函数未在我的 Jasmine 规范中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17350492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com