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.

Relaterte artikler