Внедрить сервис AngularJs, используемый при закрытии прогона для тестирования
Я пытаюсь протестировать службу angularjs под названием MyService. Если я пытаюсь внедрить его, кажется, что angular пытается использовать его до загрузки. С другой стороны, если я буду издеваться над MyService через $provide
и так далее, это работает, но у меня не будет реального объекта для тестирования.
(function (angular) {
'use strict';
angular.module('app', []).run(["MyService",
function (MyService) {
MyService.initListeners();
}
]);
// this is supposed to be in another file
angular.module('app')
.service("MyService", function() {
return {
initListeners: function() {
console.log("working")
}
}
})
}(angular));
Тест такой:
(function () {
'use strict';
describe("MyService", function () {
var MyService = null;
beforeEach(module("app"));
beforeEach(inject(function ($injector) {
MyService = $injector.get('MyService');
}));
afterEach(function () {
MyService = null;
});
it("injection works", function () {
expect(true).toBeTruthy(); // throws exception
});
});
}());
1 ответ
Решение
Я сделал тест на jsfiddle.
Я вижу порядок выполнения с некоторыми сообщениями консоли. Порядок выполнения является правильным, как и ожидалось.
My service constructor
before init
MyService.initListeners()
after init
И два теста работают правильно:
it("injection works", function () {
expect(true).toBeTruthy(); // throws exception
expect(MyService).toBeDefined();
});
Вот код: http://jsfiddle.net/jordiburgos/1efvof3k/
Это может быть ваша версия AngularJS, Jasmine и т.д...