В моем приложении AngularJS (1.7.x) есть собственный фильтр, для которого я хочу писать тесты, и я решил использовать Jest для выполнения этой задачи.
Моя основная проблема заключается в том, что, следуя этому уроку Курта , я изо всех сил пытаюсь правильно получить фильтр (у которого нет внешних зависимостей, поэтому я подумал, что это была основная цель для введения модульных тестов) загрузить в испытательный жгут.
Для начала, вот упрощенная версия фильтра для цели этого вопроса:
angular.module('app.module').filter('takeTheThing', () =>
function (parameter1) {
return `${parameter1} thing!`;
}
);
И, следуя вышеприведенному уроку, а также прочитав еще один SO вопрос, специфичный для тестирования фильтров AngularJS , я попробовал каждую возможную версию моего простого тестового файла следующим образом , но получил загадочное сообщение об ошибке от Angular об этом :
require('../node_modules/angular/angular.min.js');
require('../node_modules/angular-mocks/angular-mocks.js');
//Commenting or un-commenting this, results in module-related injector errors:
//require('./takeTheThing.filter.js');
describe('The thingerizer', () => {
let $filter;
beforeEach(angular.mock.module('app.module'));
//Injecting this specifically, or _$filter_ still errors:
beforeEach(inject(takeTheThingFilter => {
$filter = takeTheThingFilter;
}));
//Injecting here instead of in the beforeEach, same issue
it('should give me something', () => {
//Calling the specific filter or thru the Angular $filter... Same
const actual = $filter(1);
expect(actual).toEqual('1 thing!');
});
});
Я вырываю волосы, но есть кое-что довольно простое, чего мне не хватает в отношении настройки теста (в частности, как загрузить приложение «правильно» без полной загрузки всего моего приложения). Что дает?
AngularJS: 1,7,5
Угловые издевательства: 1.7.6
Jest: 23.6.0 (я использую gulp-jest
, но даже когда я напрямую звоню jest
из папки bin
, я получаю те же самые ошибки, поэтому я опустил большинство этих деталей здесь)