茉莉花错误“$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() 它应该可以正常工作。