Файл декларации отсутствует при запуске теста 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"
        ],
        ....
    }
}

Таким образом, сценарий доступен при тестировании, но не включается в производственную среду, если он предоставляется внешней службой.

Другие вопросы по тегам