web-dev-qa-db-fra.com

Configurer la configuration des tests globaux Jest avec le fichier .ts (TypeScript)

J'utilise ts-jest (Jest et TypeScript) et je souhaite configurer une configuration globale pour toutes les suites de tests (initialiser la base de données de test).

J'ai trouvé qu'il y a globalSetup options dans la configuration jest:

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

mais, seulement .js le fichier peut être utilisé pour la configuration. Je veux utiliser .ts fichier car tout mon code, y compris le code de configuration dans TypeScript.

Comment puis-je atteindre cet objectif?

12
Aleksei Semidotskii

J'ai trouvé une solution.

Ma structure de projet initiale était:

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

Configuration Jest dans 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"
}

Avec cette configuration, ts-jest Effectue le transpilage en mémoire des fichiers .ts. J'ai outDir option dans compilerOptions de mon tsconfig.json, Mais rien n'est écrit dans ce outDir et parce que je ne peux pas utiliser jest-config.js transpilé

Ensuite, je déplace le dossier des tests dans src et change la configuration de Jest. La nouvelle structure du projet est:

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

La nouvelle configuration Jest est:

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

Maintenant, je peux utiliser jest-config.js pour une configuration globale dans Jest.

Une addition

  • Le fichier de configuration Jest (dans mon exemple jest-config.js) doit exporter une fonction asynchrone:

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

  • Avant d'exécuter les tests, vous devez compiler les fichiers source .ts.

7
Aleksei Semidotskii