карма: TypeError: невозможно прочитать свойство «прототип» неопределенного

Я получаю следующую ошибку всякий раз, когда пытаюсь ввести свой service.

(function () {

    describe('Test', function () {

        var $scope, $state, service,ctrl;

        beforeEach(function() {
            module('moduleApp');

            module(function($provide) {
                $provide.service('AppService', service);
            });

            inject(function($rootScope,$injector,$controller,AppService) {
                $scope = $rootScope.$new();
                $state = $injector.get('$state');
                service = $injector.get('AppService');
                ctrl = $controller('MyCtrl', {
                    $scope: $scope,
                    $state: $state,
                    AppService: service
                });
            });
        });


        it('should have a working UserSession service', function() {
            expect(service).to.exist;
        });


    });

}());

Ошибка:

TypeError: Cannot read property 'prototype' of undefined
    at Object.instantiate (bower_components/angular/angular.js:4577:82)
    at Object.<anonymous> (bower_components/angular/angular.js:4438:24)
    at Object.invoke (bower_components/angular/angular.js:4570:17)
    at Object.enforcedReturnValue [as $get] (bower_components/angular/angular.js:4422:37)
    at Object.invoke (bower_components/angular/angular.js:4570:17)
    at bower_components/angular/angular.js:4387:37
    at getService (bower_components/angular/angular.js:4529:39)
    at Object.invoke (bower_components/angular/angular.js:4561:13)
    at Context.workFn (bower_components/angular-mocks/angular-mocks.js:2524:20)
    at window.inject.angular.mock.inject (bower_components/angular-mocks/angular-mocks.js:2496:37)
Error: Declaration Location
    at window.inject.angular.mock.inject (bower_components/angular-mocks/angular-mocks.js:2489:25)
    at Context.<anonymous> (test/unit/app/views/Test.js:17:13)

person Shane    schedule 05.07.2016    source источник


Ответы (1)


Что ты пытаешься сделать?! Сначала вы говорите карме использовать неопределенный объект service как AppService, а затем пытаетесь получить AppService из инжектора и назначить его service? Это петля.

Если тестируемая единица AppService, в этом нет необходимости:

module(function($provide) {
    $provide.service('AppService', service);
});

если вам нужна услуга, вы можете просто сделать это:

inject(function($rootScope,$injector,$controller, _AppService_) {
    $scope = $rootScope.$new();
    $state = $injector.get('$state');
    service = _AppService_;
    ctrl = $controller('MyCtrl', {
        $scope: $scope,
        $state: $state,
        AppService: service
    });
});

и если тестируемый модуль зависит от AppService, вы сначала создаете фиктивный сервис, а затем используете provide, и помните, что вам не нужно вводить его снова.

person Mehraban    schedule 05.07.2016
comment
должен ли мой контроллер содержать ссылку на AppService, как показано ниже... ctrl = $controller('MyCtrl', {$scope: $scope, $state: $state, AppService: service }); - person Shane; 05.07.2016
comment
@Шейн, я обновил свой ответ. взгляните на это и дайте мне знать, если у вас все еще есть проблема. - person Mehraban; 05.07.2016