0

Я пытаюсь проверить контроллер.Тестирование угловых контроллеров, которые имеют много зависимостей

someModule.controller('MyController', function($rootScope, $scope, dep1, dep2) { 
    ... 
    $scope.aMethod = function() { 
    ... 
    } 
    function bMethod() { 
    ... 
    } 
    ... 
}]); 

И я определяю мой тест так:

beforeEach(inject(function ($controller, $rootScope) { 
    scope = $rootScope.$new(); 
console.log($controller); 
    MyController = $controller('MyController', { 
$rootScope : $rootScope, 
$scope: scope 
    }); 
console.log('Some debug message'); 
    console.log(MyController); 
    })); 

И я получаю этот выход:

LOG: function (expression, locals, later, ident) { ... } 
LOG: 'Some debug message' 
LOG: {} 

Даже если я кладу в dep1 и dep2 я получаю те же результаты. Таким образом, scope и rootScope должны присутствовать, иначе я получаю сообщение об ошибке при его запуске.

Я не уверен, почему это не работает, поскольку последний выход пуст, поэтому в контроллере нет никаких функций, что неверно.

Я хочу проверить bMethod как минимум, но, похоже, он не правильно создает мой контроллер.

+0

«Я должен иметь два я добавил, что именно поэтому они там» ... К сожалению, я не уверен, что я понять проблему. Можете ли вы сформулировать это более четко? – mgilson

+0

Что вы пытаетесь? –

+0

@GonzaloPincheiraArancibia - я добавил более подробно. В основном в beforeIach объект MyController не имеет свойств или функций. –

ответ

1

bMethod он не привязан к scope и ни к this переменной, поэтому он не доступен в тестах. Есть два способа добавить метод в тесте:

$scope.bMethod = bMethod; //Attached to scope 
this.bMethod = bMethod; //Attached to controller 

В вашем блоке описания, вы распечатываете MyController. Это пример контроллера. Если вы хотите получить метод, приведенный в этом примере, выведет scope, и вы увидите метод.

проверить это codepen ->http://codepen.io/gpincheiraa/pen/WwXGxV

1

На контроллере нет объектов, поскольку они не определены.

Это scope объект, который имеет aMethod свойство, а не MyController:

expect(scope.aMethod).toBe(jasmine.any(Function)); 
Смежные вопросы