typescript - Testning med Nx, Jest och Angular - Kan inte hitta biblioteket när tester körs
Jag har ett nx-monorepo, som består av två appar (client, server) och 5 bibliotek (client-core, platform-core, osv). Jag hämtar biblioteken till Angular (client) applikationen genom att sätta paths i tsconfig.json.
"paths": {
"@myorg/platform-core": [
"../../libs/platform-core/src/index.ts"
],
"@myorg/client-core": [
"../../libs/client-core/src/index.ts"
],
},
Detta fungerar bra. IDE:n kan lösa biblioteken och jag kan köra applikationen med ng serve. Men när jag försöker testa Angular-applikationen med npx nx test client så kan den inte hitta biblioteken.
FAIL apps/client/src/app/core/guards/patient.guard.spec.ts
● Test suite failed to run
apps/client/src/app/core/guards/patient.guard.spec.ts:4:36 - error TS2307: Cannot find module '@myorg/client-core' or its corresponding type declarations.
4 import { EnvironmentService } from '@myorg/client-core';
~~~~~~~~~~~~~~~~~~~
Jag har försökt lägga till samma sökvägar i tsconfig.spec.json (vilket inte borde vara nödvändigt eftersom det "extends": "./tsconfig.json") och det hade ingen effekt.
Vad behöver jag göra för att få tillgång till dessa bibliotek från mina specifikationsfiler?
Svar #1
Vilka versioner använder ni? Jag hade samma problem på Angular 12 med jest 28. När jag uppgraderade alla mina beroenden till Angular 14 + jest 28 försvann problemen. Som ett tips: att använda yarn workspaces gör också att upplösningarna blir enklare utan att behöva använda paths-egenskapen.
Om versionerna är uppdaterade verkar nx också ha vissa problem med applikationsspecifika sökvägar. Det finns ett (stängt) ärende om det:
Som referens för folk som har problem med felet "Module not found". Den tillhandahållna tsconfig.app.json:s baseUrl pekar på applikationens källkod, där det verkar som att den borde peka på arbetsytans rot. För mig började länkar mellan moduler fungera när jag antingen tog bort baseUrl från tsconfig.app.json eller pekade den till arbetsytans rot. Din tsconfig.json (eller i senaste nx är det tsconfig.base.json) som ligger i arbetsytans rot bör fortfarande ha baseUrl och det verkar vara korrekt.
Se https://github.com/nrwl/nx/issues/738
Svar #2
En lösning kan vara att du i din jest.json lägger till sökvägen till biblioteket precis som du gjorde i tsconfig.json, till exempel:
"moduleNameMapper": {
"@myorg/client-core": "<rootDir>/../../libs/client-core/src/index.ts"
}
- observera att du måste lägga till
<rootDir>på det sättet, och sedan lägga till sökvägen till indexfilen eller src-mappen.
