react native - Hvordan unngå at Typescript transpilerer Jest __mocks__
Jeg får en advarsel fra Jest for hver manuell mock jeg har, fordi den finner både .ts- og .js-versjonen av den og ber meg om å slette en, altså:
jest-haste-map: duplicate manual mock found:
Module name: feedTestData
Duplicate Mock path: /Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
This warning is caused by two manual mock files with the same file name.
Jest will use the mock file found in:
/Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
Please delete one of the following two files:
/Users/[username]/Documents/git/[projectname]/dist/state/ducks/feed/__mocks__/feedTestData.js
/Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
Jeg har prøvd å tukle med exclude-nøkkelen i min tsconfig.json, men jeg kan ikke finne et glob-mønster som matcher alle __mocks__-mapper.
Det vil si "exclude":["**/__mocks__/*"] fjerner rotmappen __mocks__ fra min dist-mappe, men ikke for noen undermapper.
For hva det er verdt, bruker jeg Expo+React Native. Min Jest-oppsett i package.json ser slik ut:
"jest": {
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"transform": {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"transformIgnorePatterns": [
"node_modules/(?!(jest-)?react-native|react-navigation)"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
"testPathIgnorePatterns": [
"\\.snap$",
"<rootDir>/node_modules/",
"<rootDir>/dist/"
],
"cacheDirectory": ".jest/cache",
"collectCoverageFrom": [
"src/**/*.{ts,tsx}",
"!**/node_modules/**",
],
"setupFiles": [
"./src/global-mock-fetch.ts",
"./__mocks__/redux-mock-store.ts"
],
"automock": false
}
Svar #1
er det mulig å løse problemet, ved kanskje å instruere TypeScript til å ikke transpilere filene i mock-katalogene?
Jeg hadde suksess med en Angular + jest-oppsett, med følgende i min tsconfig:
"exclude": [
"**/__mocks__/*"
]
Jeg håper det kan hjelpe deg.
