Как создать угловой контроллер для тестирования с интерном

Я пытаюсь проверить угловой контроллер с помощью интерна тестирования среды. Я успешно проверил угловые услуги. Тем не менее при попытке загрузить контроллер с помощью $controller('myController', { '$scope': scope });

Я получаю сообщение об ошибке неизвестного поставщика.

У меня есть варианты передать строку, которая является именем зарегистрированного контроллера, или передать контроллер как функцию. Чтобы избежать загрязнения глобальной области, я решил зарегистрировать контроллер, используя синтаксис module(). Controller(). Что означает, что мне нужно передать имя в виде строки.

Контроллер определяется следующим образом:

app.controller('UnitsCtrl', [
    '$scope',
    '$http',
    'auth',
    function ($scope, $http, auth) {
        // do stuff
    }
]);

В тесте интерна я загружаю модули так:

define([
    'intern!object',
    'intern/chai!assert',
    'intern/order!bower_components/angular/angular',
    'intern/order!bower_components/angular-mocks/angular-mocks',
    'intern/order!public/src/javascripts/app.controllers' ],
    function (registerSuite, assert, ng, ngMock, appControllers) {

Затем, используя запись объектного тестирования, я регистрирую нужную мне переменную на протяжении всего теста:

registerSuite(function () {
    var $injector, unit, scope, $rootScope,
    $controller, UnitsCtrl, $window;
    return {
        name: 'Units controller',

И в функции настройки я создаю экземпляр инжектора, передавая модули, необходимые для тестирования. И создать экземпляр поставщика контроллера и корневую область.

setup: function() {
    $injector = angular.injector(['ng',  app.controllers' ]);
    $rootScope = $injector.get('$rootScope');
    $controller = $injector.get('$controller');

Наконец, перед каждым тестом я пытаюсь создать экземпляр тестируемого контроллера:

scope = $rootScope.$new();
UnitsCtrl = $controller('UnitsCtrl', { '$scope': scope });

Когда я запускаю тест, это вызывает следующую жалобу:

! [$injector:unpr] Unknown provider: authProvider <- auth <- UnitsCtrl

Что меня смущает, так это почему он ищет контроллер UnitsCtrl в службе аутентификации?!

1 ответ

Как выясняется, жалоба неизвестного поставщика была не связана с контроллером, который я пытался создать, а с одной из его зависимостей. Поскольку я не загружал модуль служб, не удалось найти зависимость (она не была зарегистрирована).

Исправление состояло в том, чтобы смоделировать зависимость и передать ее контроллеру как часть объекта, который является вторым параметром.

auth = { //stuff };
UnitsCtrl = $controller('UnitsCtrl', { '$scope': scope, 'auth': auth});
Другие вопросы по тегам