茉莉花错误“$digest already in progress”
Jasmine error '$digest already in progress'
我使用 IBM Mobilefirst 平台(ionic,AngularJS)开发了一个应用程序,现在我想使用 Jasmine 框架测试这个应用程序。
以下代码是我要测试的控制器的一部分:
$scope.method= function(...) {
ServiceSvc.insertProduct().then(function() {
$scope.finishsavingAdding = true;
$scope.finishsavingDeleting = false;
ServiceSvc.getAllProducts().then(function(data) {
$scope.product= data.invocationResult.resultSet;
$scope.$broadcast('scroll.refreshComplete');
$scope.$apply(); }) })}
我尝试使用以下代码进行单元测试,但出现此错误:
Error: [$rootScope:inprog] $digest already in progress
it("should call method", function(){
$scope.method();
expect(ServiceSvcMock.insertProduct).toHaveBeenCalled();
var data = {invocationResult: {resultSet:"test"}};
deferred.resolve(data);
$scope.$apply();
expect($scope.finishsavingDeleting).toBe(false);
expect(ServiceSvcMock.getAllProducts).toHaveBeenCalled();
});
我已经阅读了 Stack Overflow 上的其他主题,但它们对我没有帮助。
我该如何解决这个问题?
使用$scope.$apply();
时会抛出错误。这是因为,您的那段代码(包含 $scope.$apply()
)已经在 angular 的摘要周期中。
删除 $scope.$apply()
它应该可以正常工作。
我使用 IBM Mobilefirst 平台(ionic,AngularJS)开发了一个应用程序,现在我想使用 Jasmine 框架测试这个应用程序。
以下代码是我要测试的控制器的一部分:
$scope.method= function(...) {
ServiceSvc.insertProduct().then(function() {
$scope.finishsavingAdding = true;
$scope.finishsavingDeleting = false;
ServiceSvc.getAllProducts().then(function(data) {
$scope.product= data.invocationResult.resultSet;
$scope.$broadcast('scroll.refreshComplete');
$scope.$apply(); }) })}
我尝试使用以下代码进行单元测试,但出现此错误:
Error: [$rootScope:inprog] $digest already in progress
it("should call method", function(){
$scope.method();
expect(ServiceSvcMock.insertProduct).toHaveBeenCalled();
var data = {invocationResult: {resultSet:"test"}};
deferred.resolve(data);
$scope.$apply();
expect($scope.finishsavingDeleting).toBe(false);
expect(ServiceSvcMock.getAllProducts).toHaveBeenCalled();
});
我已经阅读了 Stack Overflow 上的其他主题,但它们对我没有帮助。 我该如何解决这个问题?
使用$scope.$apply();
时会抛出错误。这是因为,您的那段代码(包含 $scope.$apply()
)已经在 angular 的摘要周期中。
删除 $scope.$apply()
它应该可以正常工作。