Jasmine / Karma не находит модули Angular

Я пробую модульное тестирование с помощью Jasmine и Karma, но по какой-то причине мои модули Angular не могут быть найдены. Я модифицировал код из примеров:

karma.config.js:

files: [
  'lib/angular.js',
  'lib/angular-mocks.js',
  'js/app.js',
  'js/controllers.js',
  'js/factories.js',
  'tests/**/*.js'
]

app.js:

var app = angular.module('app', ['ngRoute']);
app.config(function ($routeProvider) {
  $routeProvider
    .when('/test', {
      templateUrl: 'views/test.html',
      controller: 'TestCtrl'
    })
    .otherwise({redirectTo: '/'});
});

controllers.js:

app.controller('TestCtrl', function ($scope, $location) {
    console.log('Test Controller');
    $scope.isActive = function(route) {
        return route === $location.path();
    };
});

test-spec.js:

describe('TestCtrl testing', function () {
    var scope, $location, createController;

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

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

    it('should...', function () {
        var controller = createController();
        $location.path('/test');
        expect($location.path()).toBe('/test');
        expect(scope.isActive('/test')).toBe(true);
        expect(scope.isActive('/contact')).toBe(false);
    });
});

сообщение об ошибке: Ошибка: [ng: areq] Аргумент TestCtrl не является функцией, получено значение undefined

Я также пробовал: beforeEach (module ('TestCtrl')), но это не помогло.

Что я пропустил?


person user1121487    schedule 21.09.2014    source источник
comment
Это должно быть beforeEach(module('app')). Также похоже, что вы забыли добавить ngAnimate в конфигурацию файлов кармы: files: ['lib/angular.js', 'lib/angular-route.js', 'lib/angular-mocks.js', ...].   -  person dfsq    schedule 21.09.2014
comment
Вот и все об этом позаботились! Интересно, почему модуль («приложение») не был упомянут в примере ... Спасибо!   -  person user1121487    schedule 21.09.2014


Ответы (1)


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

beforeEach(module('app'));

Вторая проблема заключается в том, что вы забыли добавить модуль ngAnimate в конфигурационный массив файлов Karma:

files: [
    'lib/angular.js', 
    'lib/angular-route.js', // <-- this guy
    'lib/angular-mocks.js', 
    ...
]
person dfsq    schedule 21.09.2014
comment
Кажется, у вас есть подозрения - можете ли вы помочь с подобным вопросом здесь ?: stackoverflow.com/questions/38234610/ - person geoidesic; 10.07.2016