在Jest测试中使用webpack的worker-loader解析导入

wul*_*ong 12 worker loader webpack jestjs

我正在写一个Jest测试,并且无法解决使用webpack的导入问题 worker-loader

import ImageInfoWorker from 'worker-loader?name=image_info!@WORKERS/image-info';
Run Code Online (Sandbox Code Playgroud)

我有一些其他别名在我的测试中正确解析,例如:

import Store from '@SUPPORT/store';
import * as api from '@SUPPORT/api';
Run Code Online (Sandbox Code Playgroud)

这是相关的片段 package.json

  "jest": {
    "moduleFileExtensions": ["js", "jsx"],
    "moduleNameMapper": {
      "^@CSS/(.*)$": "<rootDir>/css/$1",
      "^@COMPONENTS/(.*)$": "<rootDir>/js/components/$1",
      "^@MODELS/(.*)$": "<rootDir>/js/models/$1",
      "^@STORES/(.*)$": "<rootDir>/js/stores/$1",
      "^@SUPPORT/(.*)$": "<rootDir>/js/support/$1",
      "^(.*?)@WORKERS/(.*)$": "$1<rootDir>/js/workers/$2"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是resolve我的webpack配置的部分:

        resolve: {
          extensions: ['.js', '.jsx'],
          modules: [process.env.NODE_PATH, 'node_modules'],
          alias: {
            '@CSS':        path.join(projectRoot, 'css'),
            '@COMPONENTS': path.join(projectRoot, 'js', 'components'),
            '@MODELS':     path.join(projectRoot, 'js', 'models'),
            '@STORES':     path.join(projectRoot, 'js', 'stores'),
            '@SUPPORT':    path.join(projectRoot, 'js', 'support'),
            '@WORKERS':    path.join(projectRoot, 'js', 'workers')
        }
      },
Run Code Online (Sandbox Code Playgroud)

jcz*_*lew 5

如果不需要解析路径,可以使用"moduleNameMapper"忽略导入。

首先,创建一个包含export default ''.

接下来,将以下内容添加到您的package.json

"jest": {
    "moduleNameMapper": {
        "^worker-plugin/loader.+$": "<rootDir>/EmptyModule"
    }
}
Run Code Online (Sandbox Code Playgroud)


Pav*_*o D 2

根据cpojer 的说法,Jest 不支持网络工作者。你应该使用模拟,在这里阅读更多内容