-1

我做离子应用程序,它完成,但是当我开始测试增加了它,我面临着一个问题,$资源,在这种情况下,我有这样的控制器:单元测试控制器

.controller('newAccountCtrl', function($scope, $window, $rootScope, API, $ionicPopup, $state) { 
    $scope.newData = {}; 
    $scope.$on('$ionicView.enter', function() { 

     $scope.newData = {}; 
    }); 
    $scope.newInfo = function() { 
     API.newAccountInfo().update({ restCode: $scope.newData.restore_code }, $scope.newData, function(res, header) { 
      $rootScope.popup('success', "OKAY"); 
      $window.location.href = '#/login'; 
     }, function(err) { 
      if (err.data == null) 
       $rootScope.popup("Error", "no connection"); 
      else 
       $rootScope.popup('error', err.data.error); 
     }); 
    } 
}) 

,并在服务我使功能使用$资源的请求:

angular.module('starter.services', []) 
.factory('API', function($rootScope, $resource, $ionicPopup, $ionicLoading, $window) { return { 
      newAccountInfo: function() { 
      return $resource(base + '/restoreinfo/:restCode', { restCode: '@_restCode' }, { 
       update: { 
        method: 'PUT' 
       } 
      }, { 
       stripTrailingSlashes: false 
      }); 
     }}}); 

,并在我的测试下面的代码:

describe('newAccountCtrl', function() { 

var controller, 
    deferredLogup, scope, $q; 
beforeEach(angular.mock.module('starter')); 
// TODO: Load the App Module 
beforeEach(module('starter.controllers')); 
beforeEach(module('starter.services')); 

// TODO: Instantiate the Controller and Mocks 
beforeEach(inject(function($controller, _$q_, $rootScope, _API_) { 
    $q = _$q_; 
    scope = $rootScope.$new(); 
    API = _API_; 

    spyOn(API, 'newAccountInfo').and.callThrough(function(callback) { 
     deferredLogup.promise.then(callback); 
     return { $promise: deferredLogup.promise }; 
    }); 

    controller = $controller('newAccountCtrl', { 
     '$scope': scope, 
     API: API 
    }); 

})); 
it('#newAccountInfo', function() { 

    scope.newInfo(); 

    expect(API.newAccountInfo.update).toHaveBeenCalled(); 

}) }); 

,但我得到个E错误:

Expected a spy, but got undefined. 

我误会这里,代码工作完美

+0

好吧,'API.newAccountInfo.update'不是间谍。错误消息非常明确 – Phil

+0

为什么您的工厂每次都会返回一个创建相同资源的函数?它不应该只是返回资源本身吗? – Phil

+0

你好,因为我对其他资源有太多其他功能,这里我只提一个,有没有办法在它上面创建一个间谍? –

回答

0

只是MACKE厂返回资源的直接和删除功能。