Файл декларации отсутствует при запуске теста ng
Я недавно начал работать над существующим проектом Angular. Модульные тесты уже давно не работают. К сожалению, мне не удалось запустить их из-за ошибок ссылки на объект, определенный в файле объявления. Этот файл декларации находится в корне проекта. Во время выполнения фактическая библиотека загружается с наших серверов разработки, и все работает нормально.
При беге ng test
однако Жасмин жалуется на то, что ссылок не найдено:
ReferenceError: SomeObject is not defined
at <Jasmine>
at MyService.getDetails (http://localhost:9876/_karma_webpack_/src/app/MyService.service.ts:196:33)
Это tsconfig для работающего приложения, которое работает нормально:
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"experimentalDecorators": true,
"types": []
},
"files": [
"main.ts",
"polyfills.ts",
"someobject.d.ts"
],
"include": [
"src/**/*.d.ts"
]
}
Конфигурация теста аналогична, но дает указанную выше ошибку:
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"baseUrl": "./",
"types": [
"jasmine",
"node"
]
},
"files": [
"someobject.d.ts",
"polyfills.ts",
"test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
Файл someobject.d.ts находится в корне проекта на том же уровне, что и polyfills.ts и main.ts.
Это только второе приложение Angular, над которым я работал, поэтому у меня нет опыта в этой области. Кроме того, я впервые столкнулся с файлом объявления TypeScript. Большинство ресурсов, которые я нашел в Интернете, посвящены файлам объявлений, распространяемым через npm для таких библиотек, как lodash. Я практически не нашел информации для работы с файлами объявлений в таком проекте.
Я ищу некоторые указатели в правильном направлении, чтобы двигаться дальше.
Очевидно, я редактировал классы и имена файлов, поскольку я не вправе дословно делиться исходным кодом.
1 ответ
Попробовав несколько вещей, я решил, что добавил реальную библиотеку и включил ее только для тестирования в angular.json:
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
...
"scripts": [
"someobject.js"
],
....
}
}
Таким образом, сценарий доступен при тестировании, но не включается в производственную среду, если он предоставляется внешней службой.