Actualmente estoy usando importaciones automáticas en mi proyecto Next.js, configurado por jsconfig.json en el directorio raíz:
{ "typeAcquisition": { "include": ["jest"] }, "compilerOptions": { "baseUrl": ".", "paths": { "@/components/*": ["components/*"], "@/functions/*": ["functions/*"], "@/styles/*": ["styles/*"], "@/pages/*": ["pages/*"] } }, "exclude": ["node_modules"] } Cuando agrego pruebas de broma en un directorio de test en la raíz, las pruebas no apuntan hacia el directorio raíz. Yo he tratado:
jest.config.js que apunta al directorio raíztypeAcquisition a jsconfig.jsjsconfig.js al directorio de tests . No estoy seguro de cuál es el camino correcto o cómo configurarlo correctamente, pero ninguno de estos parece funcionar para mí. Puedo hacer que las pruebas se ejecuten eliminando las importaciones por completo y, en su lugar, simplemente ../../ -ing mi camino a través del directorio, pero esto requiere que también cambie todos los archivos anidados, es decir: en pages/api/budget , llamo a un controlador para ir a functions/api/fetchBudget . Para que la prueba Jest lo alcance, tengo que cambiar las declaraciones de importación en ambos para usar la sintaxis estándar ../../ , en lugar de @pages/.. o @functions que he configurado.
TL; DR: ¿Cómo configuro las pruebas de Jest para pasar por el directorio raíz de mi proyecto jsconfig.json ? o, en lugar de eso, ¿cómo puedo configurar la prueba Jest con su propio jsconfig.json ?
Debe configurar Jest para resolver las importaciones para que coincidan con las rutas que tiene en el archivo jsconfig.json . Esto se hace a través de la propiedad moduleNameMapper en su archivo jest.config.js .
// jest.config.js module.exports = { moduleNameMapper: { '^@/components/(.*)$': '<rootDir>/components/$1', '^@/functions/(.*)$': '<rootDir>/functions/$1', '^@/styles/(.*)$': '<rootDir>/styles/$1', '^@/pages/(.*)$': '<rootDir>/pages/$1' }, // Other configs }Para obtener más detalles, consulte los documentos de prueba de Next.js.
Recomendaría agregar ts-jest en su proyecto (npm i -D ts-jest) . Después de eso, se debe implementar la función pathsToModuleNameMapper para inyectar sus rutas de tsconfig en su configuración de jest.config :
// jest.config.js const nextJest = require("next/jest"); const { pathsToModuleNameMapper } = require("ts-jest"); const { compilerOptions } = require("./tsconfig"); const createJestConfig = nextJest({ dir: "./", }); const customJestConfig = { setupFilesAfterEnv: ["<rootDir>/jest.setup.js"], modulePaths: ["<rootDir>/src"], moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths), testEnvironment: "jest-environment-jsdom", }; module.exports = createJestConfig(customJestConfig);El problema era que quería agregar automáticamente el mismo apodo definido en tsconfig.json, no agregarlo nuevamente en jest config.
"@components/(.*)": "<rootDir>/src/components/$1", a jest.config.js y funcionó, pero no es la solución correcta,