2015-08-22 2 views
0

Я пытаюсь написать контрольный тест с использованием кармы с жасмином. Я получаю эту ошибку «Ошибка: [$ injector: unpr] Неизвестные настройкиProvider < - настройки« Я застрял часами, но не нашел решения для этого.

Мой тест Case

describe('MyController', function() { 


    var $scope, controller; 

    beforeEach(module('MyApp')); 
    beforeEach(inject(function ($rootScope, $controller) { 
     $scope = $rootScope.$new(); 
     controller = $controller('MyController', { 
      $scope: $scope 
     }); 

    })); 
    it('sets the options to "valid" if the type is val', function() { 
      var type = 'val'; 
      $scope.callOptions(type); 
      expect($scope.options).toBeTruthy(); 
    }); 

}); 

Мои karma.config.js

files: [ 
     'app/bower_components/angular/angular.js', 
     'app/bower_components/jquery/dist/jquery.min.js', 
     'app/node_modules/angular-mocks/angular-mocks.js', 
     'app/bower_components/angular-resource/angular-resource.js', 
     'app/bower_components/angular-ui-router/release/angular-ui-router.js', 
     'app/bower_components/angular-ui-router/release/angular-ui-router.min.js', 
     'app/metronic/assets/global/plugins/angularjs/plugins/angular-ui-router.min.js', 
     'app/bower_components/ui-router-extras/release/modular/ct-ui-router-extras.sticky.js', 
     'app/bower_components/ngDraggable/ngDraggable.js', 
     'app/metronic/assets/global/plugins/angularjs/angular-sanitize.min.js', 
     'app/metronic/assets/global/plugins/jquery.min.js', 
     'app/metronic/assets/global/plugins/bootstrap/js/bootstrap.min.js', 
     'app/metronic/assets/global/plugins/angularjs/plugins/ui-bootstrap-tpls.min.js', 


     'app/bower_components/ngstorage/ngStorage.min.js', 
     'app/bower_components/oclazyload/dist/ocLazyLoad.min.js', 

     'app/metronic/assets/global/plugins/angularjs/plugins/angular-file-upload/angular-file-upload.min.js', 

     'app/js/services/myProvider.js', 
     'app/js/app.js',  
     'app/controllers/MyController.js' 
    ] 

Мой контроллер:

MetronicApp.controller('MyController', 
     ['$http', 
      '$rootScope', 
      '$scope', 
      '$window', 
      function ($http, $rootScope, $scope, $window) { 

       $scope.callOptions = function (type) { 
        if (type == 'val') { 
         return $scope.optionsVal; 
        } 
        ; 
        if (type == 'Num') { 
         return $scope.optionsNum; 
        } 
        ; 

       }; 
       }); 

EDIT

Я не удалит е какой-либо файл из моего karma.config.js и теперь я получаю эту ошибку $ сферы неопределенно ..выполняются является снимок экрана ошибки: enter image description here

+0

Возможно, ваш контроллер зависит от службы с именем «настройки», которая недоступна, поскольку вы забыли загрузить ее модуль или потому, что его JS-файл отсутствует в списке. Отправьте код контроллера. Другая подозрительная вещь заключается в том, что у вас нет тестового файла в списке файлов конфигурации кармы. –

+0

Спасибо @JB Nizet за ваш ответ Я только что редактировал свой вопрос и добавлял свой контроллер. Но у меня нет сервиса, который назвал «настройки» в моем проекте, и единственный модуль, от которого зависит мой контроллер, - это «myProvider», и он уже добавляет в karma.config.js. – Akino

+0

Я бы начал с очистки всех этих зависимостей. Вы импортируете u-router 3 раза, дезинфицируете 2 раза, угловое routedespit. Я полагаю, вы используете ui-router, bootstrap, хотя вы используете ui-bootstrap, jquery два раза. Это беспорядок. Просто включите то, что вам действительно нужно. –

ответ

0

Я думаю, что, как вы вводили $ rootScope и $ контроллер неправильно Пожалуйста, попробуйте следующий фрагмент кода. Он сделает это.

describe('MyController', function() { 


var $scope, controller; 

beforeEach(module('MyApp')); 
beforeEach(inject(function ($injector) { 
    $scope = $injector.get("$rootScope").$new(); 
    controller = $injector.get("$controller")('MyController', { 
     $scope: $scope 
    }); 

})); 
it('sets the options to "valid" if the type is val', function() { 
     var type = 'val'; 
     $scope.callOptions(type); 
     expect($scope.options).toBeTruthy(); 
}); 

});