web-dev-qa-db-fra.com

Jest donne `Impossible de trouver le module` lors de l'importation de composants avec des chemins absolus

Réception de l'erreur suivante lors de l'exécution de 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)

index.jsx

import AppContainer from 'src/views/app';

package.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"
    ]
  },

Mes tests exécutant des fichiers contenant uniquement des chemins d'accès relatifs dans l'arborescence s'exécutent correctement.

Pour clarifier, je cherche comment configurer Jest pour ne pas échouer sur les chemins absolus.

14
Seth McClaine

Depuis dans package.json tu as:

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

Ce qui dit que chaque module que vous importez sera examiné node_modules _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\_ Et qui ne soit pas trouvé sera examiné dans le répertoire src.

Puisque vous cherchez dans le répertoire src, vous devriez utiliser:

import AppContainer from 'views/app';

Veuillez noter que ce chemin est absolu dans le répertoire src, vous n'avez pas besoin de naviguer pour le localiser en tant que chemin relatif.

OU vous pouvez configurer votre répertoire racine dans moduleDirectories dans votre pakcage.json afin que tous vos composants puissent être importés comme vous le souhaitez.

11
Hriday Modi

Je pense que vous cherchez: racines ou modulePaths et moduleDirectories

Vous pouvez ajouter des chemins relatifs et absolus.

Je m'assurerais d'inclure <rootDir> dans le tableau roots, <rootDir> dans le tableau modulePaths et node_modules dans le tableau moduleDirectories, à moins que vous n'ayez une bonne raison de les exclure.

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