Qu'est-ce que ts-jest et pourquoi en a-t-on besoin ?
\n\nts-jest est un préprocesseur TypeScript pour le framework de test populaire Jest. Il permet d'exécuter des tests écrits en TypeScript sans nécessiter de compilation préalable en JavaScript. La bibliothèque transforme automatiquement le code TypeScript en JavaScript pendant l'exécution des tests, en utilisant le compilateur TypeScript intégré.
\n\nL'objectif principal de ts-jest est d'assurer une intégration transparente de TypeScript avec Jest. Sans lui, il faudrait configurer manuellement la compilation TypeScript avant chaque exécution de tests ou utiliser des outils supplémentaires comme ts-node. ts-jest rend ce processus transparent et automatique.
Les principaux avantages de l'utilisation de ts-jest :
\n- \n
- Compilation automatique — les fichiers TypeScript sont compilés "à la volée" pendant les tests \n
- Prise en charge complète de TypeScript — toutes les fonctionnalités du langage (décorateurs, génériques, types) fonctionnent correctement \n
- Source maps — en cas d'erreurs, vous voyez le code TypeScript original, pas le JavaScript compilé \n
- Performance — ts-jest met en cache les résultats de compilation, ce qui accélère les exécutions répétées \n
- Flexibilité — vous pouvez configurer les paramètres du compilateur TypeScript via la configuration Jest \n
Installation de ts-jest
\n\nPour travailler avec ts-jest, vous aurez besoin de Node.js (version 14 ou supérieure) et d'un gestionnaire de paquets npm ou yarn. L'installation s'effectue avec une seule commande :
\n\nnpm install --save-dev jest typescript ts-jest @types/jest\n\nOu via yarn :
\n\nyarn add --dev jest typescript ts-jest @types/jest\n\nExplication des paquets :
\n- \n
jest— le framework de test lui-même \n typescript— le compilateur TypeScript \n ts-jest— le préprocesseur pour l'intégration \n @types/jest— les types TypeScript pour Jest (pour l'autocomplétion et la vérification des types) \n
Après l'installation, vous devez créer ou mettre à jour le fichier jest.config.js (ou jest.config.ts) :
// jest.config.js\nmodule.exports = {\n preset: 'ts-jest',\n testEnvironment: 'node',\n roots: ['<rootDir>/src'],\n testMatch: ['**/__tests__/**/*.ts?(x)', '**/?(*.)+(spec|test).ts?(x)'],\n moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node']\n};\n\nAssurez-vous également que les paramètres dans tsconfig.json sont correctement configurés :
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "outDir": "./dist",\n "rootDir": "./src",\n "declaration": true,\n "sourceMap": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist", "**/*.test.ts"]\n}\n\nDémarrage rapide avec un exemple de code
\n\nCréons une fonction simple et un test pour celle-ci. Structure du projet :
\n\nmy-project/\n├── src/\n│ ├── math.ts\n│ └── __tests__/\n│ └── math.test.ts\n├── jest.config.js\n├── tsconfig.json\n└── package.json\n\nFichier : src/math.ts
\n\nexport function add(a: number, b: number): number {\n return a + b;\n}\n\nexport function subtract(a: number, b: number): number {\n return a - b;\n}\n\nexport function multiply(a: number, b: number): number {\n return a * b;\n}\n\nexport function divide(a: number, b: number): number {\n if (b === 0) {\n throw new Error('Division by zero');\n }\n return a / b;\n}\n\nFichier : src/__tests__/math.test.ts
\n\nimport { add, subtract, multiply, divide } from '../math';\n\ndescribe('Math functions', () => {\n test('adds 1 + 2 to equal 3', () => {\n expect(add(1, 2)).toBe(3)