代码之家  ›  专栏  ›  技术社区  ›  Seth McClaine

当导入具有绝对路径的组件时,jest给出“找不到模块”

  •  11
  • Seth McClaine  · 技术社区  · 6 年前

    运行jest时接收到以下错误

    Cannot find module 'src/views/app' from 'index.jsx'
    
      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:179:17)
      at Object.<anonymous> (src/index.jsx:4:12)
    

    索引.jsx

    import AppContainer from 'src/views/app';
    

    包.json

      "jest": {
        "collectCoverageFrom": [
          "src/**/*.{js,jsx,mjs}"
        ],
        "setupFiles": [
          "<rootDir>/config/polyfills.js"
        ],
        "testMatch": [
          "<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
          "<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
        ],
        "testEnvironment": "node",
        "testURL": "http://localhost",
        "transform": {
          "^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
          "^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
          "^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
        },
        "transformIgnorePatterns": [
          "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
        ],
        "moduleDirectories": [
            "node_modules",
            "src"
        ],
        "moduleNameMapper": {
          "^react-native$": "react-native-web"
        },
        "moduleFileExtensions": [
          "web.js",
          "js",
          "json",
          "web.jsx",
          "jsx",
          "node",
          "mjs"
        ]
      },
    

    运行树中只包含相对路径的文件的测试正确运行。

    为了澄清这一点,我正在寻找如何将Jest配置为不会在绝对路径上失败。

    2 回复  |  直到 5 年前
        1
  •  10
  •   tanguy_k streuspeicher    5 年前

    从年起 package.json 您有:

    "moduleDirectories": [
        "node_modules",
        "src"
    ]
    

    这表示您导入的每个模块都将被查找 node_modules 首先,如果没有找到,将调查 src 目录。

    因为它正在调查 SRC公司 应使用的目录:

    import AppContainer from 'views/app';
    

    请注意,此路径是 SRC公司 目录,无需导航即可将其定位为相对路径。

    或者,您可以在pakcage.json中的moduledirectories中配置根目录,以便可以根据需要导入所有组件。

        2
  •  12
  •   JoCa    5 年前

    我想你在找: roots modulePaths moduleDirectories

    可以添加相对路径和绝对路径。

    我会确保包括 <rootDir> 在根数组中, <根目录 在modulePaths数组中,以及 node_modules 在moduleDirectories数组中,除非您有充分的理由排除它们。

    "jest": {
      "roots": [
        "<rootDir>",
        "/home/some/path/"
      ],
      "modulePaths": [
        "<rootDir>",
        "/home/some/other/path"
      ],
      "moduleDirectories": [
        "node_modules"
      ],
    }