Jest moduleNameMapper에서 파일 찾기 :“resolver”: 정의되지 않음

Nov 13 2020

component경로 아래의 폴더에 텍스트 파일이 있습니다 .src/components/text

그러나 Jest는 webpack 별칭 import Text from "components/text";이 사용될 때이 파일을 찾지 못합니다 .

나는 추가를 시도했다 package.json:


"jest": {
    "globals": {
      "NODE_ENV": "test"
    },
    "transform": {
      "\\.[jt]sx?$": "babel-jest" }, "verbose": false, "rootDir": ".", "collectCoverageFrom": [ "**/*.{js,jsx,ts,tsx}", "!**/*.d.ts" ], "moduleFileExtensions": [ "js", "jsx", "ts", "tsx" ], "moduleNameMapper": { "\\.(css|less|scss|sass|svg)$": "identity-obj-proxy",
      "^components/(.*)$": "<rootDir>/src/components/$1",
      "^assets/(.*)$": "<rootDir>/src/assets/$1",
      "^utils/(.*)$": "<rootDir>/src/utils/$1",
      "^styles/(.*)$": "<rootDir>/src/styles/$1"
      "/^locales\/(.*)$/": "<rootDir>/src/locales/$1",
    },
    "testMatch": [
      "**/*.{spec,test}.{js,jsx,ts,tsx}"
    ],
    "modulePathIgnorePatterns": [
      "./dist"
    ],
    "transformIgnorePatterns": [
      "/node_modules/(?!(@opt-ui|@equinor))"
    ],
    "coverageDirectory": "<rootDir>/tests/coverage/"
  }

하지만 오류가 발생합니다.

Test suite failed to run

    Configuration error:
    
    Could not locate module components/text mapped as:
    /Users/olahalvorsen/cssu-dashboard-client/src/components$1. Please check your configuration for these entries: { "moduleNameMapper": { "/^components\/(.*)$/": "/Users/olahalvorsen/cssu-dashboard-client/src/components$1"
      },
      "resolver": undefined
    }

따라서 "^components/(.*)$": "<rootDir>/src/components/$1"moduleNameMapper에서 위의 첫 번째 문제를 해결했습니다.)

하지만 이제 또 다른 오류가 발생합니다.

FAIL  src/pages/errorpage/tests/error.test.jsx
  ● Test suite failed to run

    Cannot find module 'locales' from 'src/utils/helpers/helpers.js'

    Require stack:
      src/utils/helpers/helpers.js
      src/components/text/index.jsx
      src/pages/errorpage/error.jsx
      src/pages/errorpage/tests/error.test.jsx

      29 | import { nb, enGB } from "date-fns/locale";
      30 | 
    > 31 | import translations from "locales";
         | ^
      32 | 
      33 | export const capitalize = string => {
      34 |   if (typeof string === "string") {


위의 package.json을 업데이트했습니다. 로케일의 상대 디렉토리는입니다 src/locales. 이 작동하지 않아야 :

  "moduleNameMapper": {
      "^locales/(.*)$": "<rootDir>/src/locales$1",

나는 사용해 보았다 : "/^locales\/(.*)$/": "<rootDir>/src/locales/$1"

해결책은 다음을 사용하는 것입니다. "^locales(.*)$": "<rootDir>/src/locales/$1"

답변

2 tmhao2005 Nov 13 2020 at 17:08

로그를 기반으로 귀하의 구성이 주어진 코드와 다른 것 같습니다 ./^components\/(.*)$/: "<rootDir>/src/components$1"^components(.*)$

위의 내용이 옳다고 가정하면 제대로 작동하려면 다음과 같이 변경해야 할 수 있습니다.

{
  "moduleNameMapper": {
    "/^components\/(.*)$/": "<rootDir>/src/components/$1" // You missed out `/` before the rest value `$1`
  },
}