2016-03-05 5 views
1

Где я ошибаюсь? Как я могу получить экземпляр контроллера в Jasmine + angular? Как я могу разрешить контроллер? Я понятия не имею, что я должен использовать, чтобы разрешить это.Жасмин + карма + угловой тест создать контроллер

'use strict'; 

angular.module('myApp.contact', ['ui.router']) 
.controller('contactCtrl', ['$scope', function ($scope) { 
    $scope.contact = { 
     name: 'John Doe' 
    }; 
}]); 


describe('myApp.contact module tests', function() { 
    var scope, createController; 

    beforeEach(inject(function ($rootScope, $controller) { 
     scope = $rootScope.$new(); 

     createController = function() { 
      return $controller('contactCtrl', { 
       '$scope': scope 
      }); 
     }; 
    })); 

    it('contact name is John Doe', function() { 
     var controller = createController(); 
     expect(controller).toEqual('John Doe'); 
    }); 
}); 

myApp.contact module tests 
    ✗ contact name is John Doe 
     Error: [ng:areq] Argument 'contactCtrl' is not a function, got undefined 
     http://errors.angularjs.org/1.4.9/ng/areq?p0=contactCtrl&p1=not%20a%20function%2C%20got%20undefined 
      at E:/angular-seed/app/bower_components/angular/angular.js:68:12 
      at assertArg (E:/angular-seed/app/bower_components/angular/angular.js:1816:11) 
      at assertArgFn (E:/angular-seed/app/bower_components/angular/angular.js:1826:3) 

ответ

2

Вы пропустившие несколько вещей здесь

  1. Вам необходимо инициализировать угловой модуль, чтобы сделать ваш контроллер & всех других компонентов, доступных делая module('myApp.contact') в вашем перед каждыми, так что Error: [ng:areq] Argument 'contactCtrl' is not a function, got undefined волей ушла.
  2. Тогда внутри Assert заявление теста вы должны использовать scope объект вместо controller (вы можете использовать контроллер, когда ваши свойства ограничены в this)
  3. Не забудьте обратиться contactCtrl.js & ui-router.js на стр.

    expect(scope.contact.name).toEqual('John Doe'); 
    

Код

describe('myApp.contact module tests', function() { 
    var scope, createController; 
    beforeEach(module('myApp.contact')); //1st change 

    beforeEach(inject(function ($rootScope, $controller) { 
     scope = $rootScope.$new(); 
     createController = function() { 
      return $controller('contactCtrl', { 
       '$scope': scope 
      }); 
     }; 
    })); 

    it('contact name is John Doe', function() { 
     var controller = createController(); 
     expect(scope.contact.name).toEqual('John Doe'); //2nd change 
    }); 
}); 
+0

модуль (myApp.contact); говорит, что myApp не определен, я пытаюсь изменить это на модуль ('myApp.contact'); Ошибка: инжектор уже создан, не удается зарегистрировать модуль! В karma.conf.js у меня есть все файлы, включенные –

+0

@PeterPan обернуть его одинарной цитатой, я пропустил это –

+0

Я обертываю его в первый раз, но это бросает: Ошибка: инжектор уже создан, не может зарегистрировать модуль! –

Смежные вопросы