Ошибка TypeError: undefined не является конструктором (оценка 'angular.controller (' myView ')') - PullRequest
0 голосов
/ 26 апреля 2018

Я получаю приведенную ниже ошибку при выполнении модульного тестирования кармы / жасмина для обоих тестовых случаев. Я пытался изменить контроллер, добавив angular.controller в файл спецификации, даже если он не работает. Есть ли способисправить?

 TypeError: undefined is not a constructor (evaluating 'angular.controller('myView')') 

myView.spec.js

// myView.spec.js
(function(){
describe('controller: myView', function(){


     var module,myView,$q, $rootScope, $scope, uiGridConstants, overviewService, commonService, $timeout;
    beforeEach(function() {
        module = angular.module('app.myView');
        controller= angular.controller('myView')
    });

    beforeEach(inject(function ($controller, _$q_, _$rootScope_, _$timeout_) {

        $q= _$q_;
        $rootScope = _$rootScope_;
         $timeout= _$timeout_;

        myView= $controller('myView', {
            $q : _$q_,
            $rootScope :  _$rootScope_,
             $timeout:  _$timeout_
        });


    }));

    describe("myViewto be defined", function() {
        it("should be created successfully", function () {
            expect(controller).toBeDefined();
        });

        it("overview should be defined", function () {
            expect(myView()).toBeDefined();
        });

    });

});

})();

и myView.js

(function() {
    'use strict';

    angular
        .module('app.myView')
        .controller('myView', myView);

    function myView($q, $rootScope, $scope, uiGridConstants, myViewService, commonService, $timeout) {
        var vm = this;
        vm.callFeedback = function () { };
})();

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы должны передать введенные параметры вашему контроллеру, как показано:

(function() {
'use strict';

angular
    .module('app.myView')
    .controller($q,$rootScope,$scope,uiGridConstants,'myView', myView);

function myView($q, $rootScope, $scope, uiGridConstants, myViewService, commonService, $timeout) {
    var vm = this;
    vm.callFeedback = function () { };

}) ();

Также убедитесь, что ваш модуль имеет все необходимые зависимости в angular.module('app.myView',['uiGridConstants', ...'etc']);

0 голосов
/ 10 мая 2018

Совместное использование следующего кода

// myView.spec.js
(function(){
describe('myView', function(){
  var $controller, myView;

   //we use angular-mocks to specify which modules we'll need within this  
   //test file. 
   beforeEach(angular.mock.module('app.myView'));

   // Inject the $controller service to create instances of the controller 
   //(myView) we want to test
   beforeEach(inject(function(_$controller_) {
      $controller = _$controller_;
      myView = $controller('myView', {});
    }));

   // Verify our controller exists
   it('should be defined', function() {
      expect(myView).toBeDefined();
   });
  });

})();

Мы устанавливаем _$controller_ в переменную $controller, которую мы создали, а затем создаем экземпляр нашего контроллера, вызывая $ controller ('myView', {}).Первый аргумент - это имя контроллера, который мы хотим протестировать, а второй аргумент - это объект зависимостей для нашего контроллера.

...