reactjs - Jest følger ikke filer i en symlink-mappe og prøver å bruke hovedmappen for deling
Spørsmålet er - hvordan tvinge Jest til å følge symlinkede delte mappestrukturer, men ikke hovedmappen?
Jeg har den neste filstrukturen:
root
├── projects
│ ├── A
│ │ ├── node_modules
│ │ ├── shared (symlink ../../shared-main)
│ │ ├── components
│ │ ├── settings.ts
│ ├── B
│ │ ├── node_modules
│ │ ├── shared (symlink ../../shared-main)
│ │ ├── components
│ │ ├── settings.ts
├── shared-main
│ ├── utils.ts
│ ├── config.ts
I mine prosjekter, A og B, bruker jeg utils fra den delte mappen. Utils.ts bruker config.ts hvor den importerer innstillingsfiler med banen './settings.ts', men inne i shared-main-mappen ser det ut som om "filen finnes ikke" (det er ok). Men Jest i et prosjekts tester, når det møter bruk av en delt fil, feiler testen med feilen: "../../shared-main/config.ts:9:35 - error TS2307: Cannot find module '../settings' or its corresponding type declarations."
Hvordan komme seg rundt dette og tvinge Jest til å bruke config.ts fra symlinken-mappen i stedet for hovedmappen?
Svar #1
Hva med "testRegex": ["test/.*.[jt]s"], i din jest-konfigurasjon slik at den ikke prøver å finne delte filer? Hvis du bruker delte filer på tvers av flere prosjekter, bør ikke ett enkelt prosjekt teste disse filene; de bør kun teste sine egne filer.
Jeg er imidlertid ikke så sikker på at symlinker er problemet ditt; når du bruker TypeScript på denne måten og prøver å bruke filer utenfor prosjektets rootDir, vil det ikke finne typene for dem, eller det vil klage på at det ikke finner typene hvis du har lagt dem til i tsconfig include/exclude. Akkurat nå kan jeg bare anta at du bruker tsc --project med spesifikke konfigurasjonsfiler for hvert prosjekt.
// tsconfig.json
"include": ["projectA/**/*.ts"],
Hvis du har gjort noe slikt, vil det ikke finne noen typer utenfor projectA, så alt i config.ts og utils.ts vil ikke ha noen typer eller kunne finne noen moduler, med mindre de er inkludert i din tsconfig.
For å vise et enklere eksempel hvis jeg har:
// tsconfig.json
...
includes: ["src/**/*.ts"]
...
Sammen med en katalogstruktur som dette:
- tsconfig.json
- example.ts
- src
Da vil ingenting i example.ts kunne finne typene eller modulimportene sine.
Måten jeg omgår dette problemet i prosjektet mitt på, er å bruke ts-jest sammen med å spesifisere hvor man finner tester, i tillegg til å overstyre globals rootDir.
// .jestrc.json
"testRegex": ["test/.*.[jt]s"],
...
"globals": {
"ts-jest": {
"tsconfig": {
"rootDir": "."
}
}
}
