Yo uso Jest con Typescript. Quiero crear un monorepo. La estructura de mis carpetas es:
fe |-app1 |--.jest.config.ts |--tsconfig.json |-shared |--dummyData.ts Quiero una prueba unitaria de app1 para acceder a algunos datos de la carpeta shared .
fe/app1/demo.spec.ts :
import { someData } from '@shared/dummyData' //<--HERE: the alias is works, but jest can not understand "export" keyword descrube('demo' () => { it('demo test', () => { expect(someData).toBe('DUMMY')); }) }) fe/shared/dummyData.ts :
export const someData = 'DUMMY';El problema es que jest arroja un error:
Jest encountered an unexpected token {"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){export const someData = 'DUMMY'; ^^^^^^ Según tengo entendido, no puede analizar módulos mecanografiados o es6 que fueron producidos por ts y babel. Lo que funciona bien mientras la carpeta shared está dentro de app1 , pero una vez que está fuera (y fuera de la carpeta raíz, ig '<rootDir>/../shared/$1' ) comienza a arrojar ese error.
Aquí están mis configuraciones:
Describí el alias en fe/app1/tsconfig.json :
{ ... "compilerOptions": { "target": "esnext", "module": "esnext", "paths": { "@/*": ["app/src/*"], "@shared/*": ["shared/*"] } } } Y en fe/app1/.jest.config.ts :
module.exports = { ... transform: { '^.+\\.js$': '<rootDir>/node_modules/babel-jest', '^.+\\.(jsx?|tsx?)$': 'ts-jest' }, moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1', '^@shared/(.*)$': '<rootDir>/../shared/$1', } }Algunos pensamientos:
tsconfig en la carpeta raíz ( fe ), pero quiero iniciar pruebas unitarias desde la carpeta fe/app1 ...projects , roots , etc., pero hasta ahora no tengo suerte.Bien, encontré la solución:
Para monorepo, es importante tener la configuración de babel como un archivo JS
Entonces, simplemente cambie el nombre de .babelrc a babel.config.js (en la carpeta desde la que llamó a jest, en mi caso es fe/app1 )
Para obtener más información, puede consultar este comentario (y tal vez este hilo )