Testing with Jest and Webpack aliases

前端 未结 7 1514
生来不讨喜
生来不讨喜 2020-12-14 14:48

I am looking to be able to use webpack aliases to resolve imports when using jest, and optimally, reference the webpack.aliases to avoid duplication.

Je

7条回答
  •  佛祖请我去吃肉
    2020-12-14 15:05

    Using: "jest": "^26.5.3", and "webpack": "4.41.5", I was able to properly match my webpack/typescript aliases in the jest.config.js with this pattern:

    Webpack config:

    module.exports = {
       // the rest of your config
        resolve: {
          alias: {
            'components': path.resolve(__dirname, 'js/app/components'),
            'modules': path.resolve(__dirname, 'js/app/modules'),
            'types': path.resolve(__dirname, 'js/types'),
            'hooks': path.resolve(__dirname, 'js/app/hooks'),
            'reducers': path.resolve(__dirname, 'js/app/reducers'),
            '__test-utils__': path.resolve(__dirname, 'js/app/__test-utils__') 
          }
        },
    }
    

    Jest.config.js:

      moduleNameMapper: {
        '^types/(.*)$':  '/js/types/$1',
        '^components/(.*)$': '/js/app/components/$1',
        '^modules/(.*)$':  '/js/app/modules/$1',
        '^hooks/(.*)$':  '/js/app/hooks/$1',
        '^reducers/(.*)$':  '/js/app/reducers/$1',
        '^__test-utils__/(.)$': '/js/app/__test-utils__/$1' 
      }
    

    Here's an explanation of the symbols:

    • (.*)$: capture whatever comes after the exact match (the directory)
    • $1: map it to this value in the directory I specify.

    and tsconfig.json:

        "paths": {
          "config": ["config/dev", "config/production"],
          "components/*": ["js/app/components/*"],
          "modules/*": ["js/app/modules/*"],
          "types/*": ["js/types/*"],
          "hooks/*": ["js/app/hooks/*"],
          "reducers/*": ["js/app/reducers/*"],
          "__test-utils__/*": ["js/app/__test-utils__/*"]
        }
    

提交回复
热议问题