web-dev-qa-db-fra.com

Test avec des alias Jest et Webpack

Je cherche à pouvoir utiliser des alias WebPack pour résoudre les importations lorsque jest est utilisé et, de manière optimale, référencer le webpack.aliases pour éviter les doublons.

Jest conf:

  "jest": {
    "modulePaths": ["src"],
    "moduleDirectories": ["node_modules"],
    "moduleNameMapper": {
      "^@shared$": "<rootDir>/shared/",
      "^@components$": "<rootDir>/shared/components/"
    }
  },

Alias ​​Webpack:

exports.aliases = {
    '@shared': path.resolve(paths.APP_DIR, 'shared'),
    '@components': path.resolve(paths.APP_DIR, 'shared/components'),
};

Importations:

import Ordinal from '@shared/utils/Ordinal.jsx';
import Avatar from '@components/common/Avatar.jsx';

Pour une raison quelconque, le @ provoque des problèmes. Ainsi, lorsqu'il est supprimé (dans les deux alias et import), il peut trouver shared mais components ne peut toujours pas être résolu.

 FAIL  src/shared/components/test/Test.spec.jsx
  ● Test suite failed to run

    Cannot find module '@shared/utils/Ordinal.jsx' from 'Test.jsx'

J'ai essayé d'utiliser jest-webpack-alias , babel-plugin-module-resolver et les docs Jest/Webpack

22
speak

Cela semble avoir été corrigé.

Ci-dessous une configuration de travail:

Versions

"jest": "~20.0.4"

"webpack": "^3.5.6"

package.json

"jest": {
  "moduleNameMapper": {
    "^@root(.*)$": "<rootDir>/src$1",
    "^@components(.*)$": "<rootDir>/src/components$1",
  } 
}

webpack.shared.js

const paths = {
  APP_DIR: path.resolve(__dirname, '..', 'src'),
};

exports.resolveRoot = [paths.APP_DIR, 'node_modules'];

exports.aliases = {
  '@root': path.resolve(paths.APP_DIR, ''),
  '@components': path.resolve(paths.APP_DIR, 'components'),
};
11
speak

Depuis que j'ai eu le même problème avant de relire, et cette fois plus attentivement la documentation. La configuration correcte devrait être:

  "jest": {
    "moduleNameMapper": {
      "^@shared(.*)$": "<rootDir>/shared$1",
      "^@components(.*)$": "<rootDir>/shared/components$1"
    }
  },
13

FWIW, essayez de changer l’ordre des alias, maintenez les plus spécifiques et les moins spécifiques, 

"moduleNameMapper": {
  "^@components$": "<rootDir>/shared/components/",
  "^@shared$": "<rootDir>/shared/"
}
0
hazardous