2016-01-04 4 views
2

Я пытаюсь настроить тест для приложения AngularJS с помощью Jasmine. Это следует за docs, но немного проще. fiddle имеет следующий код:

angular.module('myapp', []) 
    .controller('MyCtrl', ['$scope', function MyCtrl($scope) { 
    $scope.greeting = "hello"; 
    }]); 

describe('My controller', function() { 
    var $controller; 
    module('myapp'); 
    inject(function(_$controller_) { 
    $controller = _$controller_; 

    }); 

    it('greets', function() { 
    var $scope = {}; 
    var controller = $controller('MyCtrl', { 
     $scope: $scope 
    }); 
    expect($scope.greeting).toEqual('hello'); 
    }) 

}); 

И жасмин сообщает об ошибке: TypeError: $controller is not a function.

Как исправить код, чтобы избавиться от этой ошибки и быть в состоянии проверить контроллер?

ответ

7

Вам нужно создать экземпляр модуля приложения и ввести $controller для каждого испытания с использованием beforeEach блоков:

describe('My controller', function() { 
    var $controller; 

    beforeEach(module('myapp')); 

    beforeEach(inject(function(_$controller_) { 
     $controller = _$controller_; 
    })); 

    it('greets', function() { 
     var $scope = {}; 
     var controller = $controller('MyCtrl', { 
      $scope: $scope 
     }); 
     expect($scope.greeting).toEqual('hello'); 
    }) 

}); 

Демо:https://jsfiddle.net/f5ebb55f/6/

+0

не могли бы сказать, что лучше хороший ответ – danday74

+0

и вы должны сделать убедитесь, что исходный код необходимых контроллеров загружен в конфигурацию вашей кармы в разделе «файлы». Имя модуля, которое вы загружаете в команде 'beforeEach (module ('modulename'));' в самом тесте теста, должно совпадать с именем модуля, которое вы используете в исходном файле контроллера, например. 'angular.module ('modulename', []). controller ...' – MichaelHuelsen

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