单元测试控制器

Unit test controller

我制作了一个离子应用程序,它完成了,但是当我开始向它添加测试时,我遇到了 $resources 问题,在这种情况下,我有这个控制器:

  .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);
        });
    }
})

在服务中,我在函数中使用 $resources 发出请求:

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();

})   });

但我收到错误消息:

Expected a spy, but got undefined.

我在这里误解了什么,代码工作完美

只是 macke factory return 资源直接和删除功能。