2014-09-21 2 views
3

Я пытаюсь выполнить единичное тестирование с помощью Jasmine и Karma, но по некоторым причинам мои угловые модули не могут быть найдены. Я изменил код из примеров:Жасмин/Карма не находит Угловые модули

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(); 
    }; 
}); 

тест-спецификации .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); 
    }); 
}); 
сообщение

ошибка: Ошибка: [нг: areq] Аргумент 'TestCtrl' не является функцией, был неопределенным

Я также попытался с: beforeEach (модуль ('TestCtrl')), но не помогло.

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

+1

Он должен быть 'beforeEach (модуль (" приложение «))'. Также похоже, что вы забыли добавить ngAnimate в файл karma config: 'files: ['lib/angular.js', 'lib/angular-route.js', 'lib/angular-mocks.js', ...]' , – dfsq

+0

Это позаботилось об этом! Интересно, почему модуль («приложение») не упоминался в этом примере ... Спасибо! – user1121487

ответ

3

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

beforeEach(module('app')); 

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

files: [ 
    'lib/angular.js', 
    'lib/angular-route.js', // <-- this guy 
    'lib/angular-mocks.js', 
    ... 
] 
+0

У вас, похоже, это сумасшедшее - вы можете помочь с похожим вопросом здесь: http://stackoverflow.com/questions/38234610/how-to-inject-ngroute-into-jasmine-karma-angularjs-unit-test – geoidesic