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 )