Тесты в AngularJS: эталонная ошибка функции впрыска
Я пытаюсь проверить код ниже:
describe('myService test', function () {
describe('when I call myService.one', function () {
beforeEach(angular.module('TargetMarketServices'));
it('returns 1', inject(function (imagesRepository) {
expect(true).toEqual(true);
}));
});
});
Когда этот код выполняется, я получаю эту ошибку:
TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')
at http://localhost:8080/testacular.js:76
at http://localhost:8080/context.html:35
ReferenceError: Can't find variable: inject
at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:6
at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:8
at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:10
PhantomJS 1.8: Выполнено 1 из 3 (1 НЕИСПРАВНО) (пропущено 2) (0,072 с /0,01 сек)
Для моего теста я использую Testacular с Jasmine и PhantomJS.
Ответы
Ответ 1
AngularJS предоставляет две тестовые библиотеки:
- angular -mocks.js
- angular -scenario.js
angular -mocks используется для тестирования Жасмина и Кармы. Он публикует глобальные методы module() и inject(), которые будут использоваться в ваших тестовых тестах Jasmine. Это означает, что вы должны загрузить angular -mocks.js script (после загрузки библиотеки angular.js/script)
angular -scenario используется только для тестирования e2e.
Ответ 2
Линия, в которой у вас
beforeEach(angular.module('TargetMarketServices'));
должен быть
beforeEach(module('TargetMarketServices'));
Если вы посмотрите проект angular-phonecat в test/unit/directivesSpec.js, он использует
beforeEach(module('myApp.directives'));
Если я изменю его, чтобы вместо этого использовать angular.module:
beforeEach(angular.module('myApp.directives'));
то я также получаю эту ошибку при запуске testacular:
TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)')