Настройка настройки глобальных тестов Jest с помощью файла.ts(TypeScript)

Я использую ts-jest (Jest и TypeScript) и хочу настроить некоторую глобальную настройку для всех тестовых наборов (инициализировать тестовую базу данных).

Я обнаружил, что в настройке jest есть параметры globalSetup:

"jest": {
    "globalSetup": "./jest-config.js"
}

но только файл .js можно использовать для настройки. Я хочу использовать файл .ts потому что весь мой код, включая код для установки в TypeScript.

Как я могу это достичь?

Ответ 1

Я нашел решение.

Моя первоначальная структура проекта:

.
|--src
|  |--service.ts
|--tests
|  |--service.test.ts
|--dist
|--tsconfig.json 
|--package.json

Конфигурация Jest в package.json:

"jest": {
  "globals": {
    "ts-jest": {
      "tsConfigFile": "tsconfig.json"
    }
  },
  "moduleFileExtensions": ["ts","js"],
  "transform": {
    "^.+\\.(ts|tsx)$": "./node_modules/ts-jest/preprocessor.js"
  },
  "testMatch": [
    "**/tests/**/*.test.(ts|js)"
  ],
  "testEnvironment": "node"
}

С помощью этой конфигурации ts-jest выполняет пересылку памяти в файлах.ts. У меня есть опция outDir в compilerOptions моего tsconfig.json, но ничего не записано в этом outDir и потому, что я не могу использовать transpiled jest-config.js

Затем я перемещаю тестовую папку в src и изменяю конфигурацию Jest. Новая структура проекта:

.
|--src
|  |--service.ts
|  |--tests
|     |--service.test.ts
|     |--jest-config.ts
|--dist
|--tsconfig.json 
|--package.json

Новая конфигурация Jest:

"jest": {
  "globalSetup": "./dist/tests/jest-config.js",
  "moduleFileExtensions": ["ts", "js", "json"],
  "testMatch": [
    "**/dist/**/*.test.js"
  ],
  "testEnvironment": "node"
}

Теперь я могу использовать jest-config.js для глобальной настройки в Jest.

прибавление

  • Файл установки Jest (в моем примере jest-config.js) должен экспортировать одну асинхронную функцию:

    module.exports = async function() {... }

  • Перед запуском тестов вам необходимо скомпилировать исходные файлы.ts.

Ответ 2

Вы должны просто указать на файл с расширением, поэтому, если у вас есть:

./jest-config.ts

Компилятор создаст:

./jest-config.js

... для вас (в зависимости от настроек tsconfig - если вы отправляете свой вывод в другую папку, он будет там).

Таким образом, вы все же можете указать Jest в базовом файле JavaScript, даже если вы редактируете файл TypeScript.