2013-03-16 2 views
0

Я пытаюсь настроить единую тестовую среду для своего проекта, и у меня возникают некоторые проблемы. Я пытаюсь использовать Testacular с Jasmine для тестирования моего кода AngularJS.Проблемы с Testacular с жасмином и угловым

У меня есть модуль Services, который имеет заводской метод под названием KeepAlive. Вот его настройка.

angular.module('services', []).factory('KeepAlive', ['$rootScope', function($rootScope){ 
    //My Code 
}]); 

Этот модуль прикреплен к модулю под названием MainModule. Вот его код.

angular.module('MainModule', ['filters', 'services', 'directives', 'ui']) 
.config(['$httpProvider', function($httpProvider){ 
    //My Code 
}]).run(['$rootScope', '$timeout', '$routeParams', 'KeepAlive', function($rootScope, $timeout, $routeParams, KeepAlive){ 
    //My Code 
}]); 

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

 JASMINE, 
    JASMINE_ADAPTER, 
    'assets/lib/jquery/jquery-1.7.1.js', 
    'assets/lib/angular/angular.js', 
    'assets/lib/angular/angular-ui.js', 
    'jsTests/MockingLib/angular-mocks.js', 
    'assets/scripts/modules/Admin.js', 
    'assets/scripts/modules/MainModule.js', 
    'assets/scripts/services/KeepAlive.js', 
    'assets/scripts/services/Admin.js', 
    'assets/scripts/filters.js', 
    'assets/scripts/directives.js', 
    'assets/scripts/controllers/admin/*.js', 

Теперь это ошибка в моей тестовой консоли. Вот ошибка, которую я получаю.

Error: Unknown provider: KeepAliveProvider <- KeepAlive 
    at Error (<anonymous>) 
    at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2627:8 
    at Object.getService [as get] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32) 
    at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2632:38 
    at getService (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2755:32) 
    at Object.invoke (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2773:6) 
    at d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:71 
    at Array.forEach (native) 
    at forEach (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:110:11) 
    at Object.createInjector [as injector] (d:/Work/Workspace/TalentNetwork/assets/lib/angular/angular.js:2637:3) 

Это мой тестовый чехол Jasmine.

beforeEach(function() { 
    admin = module("MainModule"); 
    module("services"); 
}); 

Что мне не хватает? Я новичок в testacular. Заранее спасибо.

+2

Убедитесь, что вы вызываете 'модуль ('услуги')' в 'beforeEach' блок в ваших тестах. –

+0

BTW, если я удалю KeepAlive из моего метода запуска, а также из моего списка файлов, он выполнит все мои тестовые примеры – Abilash

+1

Я уверен, что @Vojta и я правы - модуль не загружается. Ваш код на Github? –

ответ

4

Ошибка говорит, что кто-то попросил услугу под названием «KeepAlive», но инжектор не знает, как ее создать (для этого нет провайдера).

Это значит, что вы, вероятно, не загрузили модуль.

Когда вы загружаете приложение на производство, вы даете ему ng-app="something", в котором указывается, какой модуль загружен. Точно так же вам нужно указать, какие модули вы хотите загрузить во время тестирования.

Это должно решить вашу проблему:

beforeEach(module('services')); 
+0

Hi @Vojta. Спасибо за ответ. Я загрузил свой модуль. Я включил 'module (« MainModule »);' в my beforeEach. Я также попытался добавить то, что вы мне сказали. Это не сработало. Что мне не хватает? – Abilash

+0

Перейдите по адресу http: // localhost: 9876/debug.html и проверьте консоль, если есть другие ошибки. Это не имеет ничего общего с Testacular. – Vojta

+0

Извините за беспокойство @ Войта. Я не заказывал файлы. Спасибо за тонну за вашу помощь – Abilash