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?
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.