茉莉花错误' $摘要已在进行中'

时间:2015-10-20 14:12:29

标签: angularjs unit-testing jasmine

我使用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(); }) })}

我尝试使用以下代码进行单元测试,它会抛出这个错误:

  

错误:[$ rootScope:inprog] $ digest已在进行中

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上的其他主题,但他们没有帮助我。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用$scope.$apply();时会引发错误。这是因为,您的代码(包含$scope.$apply())已经处于有角度的摘要周期中。

删除$scope.$apply(),它应该可以正常工作。