2015-02-11 4 views
1

Я действительно надеюсь, что это тривиальная проблема. Да, у меня есть RTFM. Я фактически использую метод Angular documented для ввода контроллера, но по какой-то причине мой контроллер не определен. Основное различие здесь в том, что я привык работать над приложениями с одним модулем, и на этот раз у меня есть приложение с несколькими модулями. Я бы не подумал, что это изменит ситуацию, но ты туда. Вместо длинного описания, я перейду прямо к коду:Как я могу ввести угловой контроллер в свой модульный тест

Использование Угловая 1.2.16

Unit Test Framework: жасмин

app.js

angular.module('OBB', [ 
    // Native AngularJS DI 
    'ngResource', 'ngCookies', 

    // bunch of modules 
    ... 

    // OBB Page Modules 
    'OBB.home', 'OBB.buckets', 'OBB.company', 'OBB.advSearch', 'OBB.users' 
]) 

Итак, я Я пытаюсь проверить контроллер в модуле OBB.home.

home.js

angular.module('OBB.home', ['ui.router']) 
.controller('HomeCtrl', ['$log', '$rootScope', '$scope', '$state', 'AUTH_EVENTS', 
    function HomeCtrl ($log, $rootScope, $scope, $state, AUTH_EVENTS) { 
    $scope.signInFormData = { 
     email: null, password: null 
    }; 
    //more code... 
}]); 

home.spec.js

describe('Unit Home Controllers: ', function() { 

    var homeController, scope; 

    beforeEach(module('OBB.home')); 

    beforeEach(inject(function (_$rootScope_, $controller) { 
     scope = _$rootScope_.$new(); 
     homeController = $controller('HomeCtrl', { 
     $rootScope: _$rootScope_, 
     $scope: scope, 
     $log: {}, 
     $state: {}, 
     AUTH_EVENTS: {}, 
     }); 
    })); 

    it('Home Controller is correctly instantiated', inject(function() { 
    expect(scope).toBeDefined(); // Pass 
    expect(scope.signInFormData).toBeDefined(); // Fails 
    })); 
}); 

ответ

0

Вам нужно глумиться/загружать зависимости.

describe('Unit Home Controllers: ', function() { 

    var homeController, scope; 

    beforeEach(module('OBB.home')); 

    beforeEach(inject(function (_$rootScope_, $controller) { 
     scope = _$rootScope_.$new(); 
     homeController = $controller('HomeCtrl', { 
     $rootScope: _$rootScope_, 
     $scope: scope, 
     $log: {}, //You will have to add methods as needed 
     $state: {}, 
     AUTH_EVENTS: {} 
     }); 
    })); 

    it('Home Controller is correctly instantiated', inject(function() { 
    expect(scope).toBeDefined(); // Fails 
    expect(scope.signInFormData).toBeDefined(); // Fails 
    })); 
}); 
+0

Это не сработало для меня. Даже убедившись, что список параметров функции соответствует, я все равно получаю неопределенный контроллер. Что расстраивает больше всего, так это то, что сообщений об ошибках даже не дает мне намека на то, что может быть неправильным. Это просто неопределенно. Я не уверен, есть ли вложенная ошибка, потому что модуль также имеет зависимые сервисы. Я собираюсь пройти через контроллер и начать комментировать все и медленно открыть его, чтобы узнать, помогает ли это. –

+0

Обновлен мой код, чтобы показать свои дополнения. Благодаря! –

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