导入图像打破了笑话测试

IT技术 reactjs testing webpack jestjs
2021-05-06 00:59:07

在 React 组件中导入资产(例如,从“../../../assets/img/logo.png 导入徽标”)给出了这样的错误

({"Object.":function(module,exports,require,__dirname,__filename,global,jest){ PNG 语法错误
:ScriptTransformer._transformAndBuildScript 处的令牌无效或意外(node_modules/jest-runtime/build/script_transformer.js:305 :17)

我的笑话配置是

"jest": {
"testRegex": ".*\\.spec\\.js$",
"moduleFileExtensions": [
  "js",
  "jsx",
  "json"
],
"moduleDirectories": [
  "node_modules",
  "src",
  "assets"
],
"moduleNameMapper": {
  "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$/": "<rootDir>/__mocks__/fileMock.js",
  "\\.(css|less|scss)$": "<rootDir>/__mocks__/styleMock.js"
},
"verbose": true,
"bail": true
}

我错过了什么?

4个回答

当您导入图像文件时,Jest 会尝试将图像的二进制代码解释为 .js,因此会出错。

唯一的出路是在 jest 看到图像导入时模拟默认响应!

我们如何做到这一点?

  • 首先,每次遇到图像导入时,您都会告诉 Jest 运行模拟文件。您可以通过将下面的密钥添加到您的 package.json 文件中来做到这一点
"jest": {
 "moduleNameMapper": {
      "\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/__mocks__/fileMock.js"
    }
}

注意:如果您已经拥有"Jest"密钥,只需"moduleNameMapper"在其中添加子项

  • 最后,mocks在您的根目录中创建一个文件夹并fileMock.js在其中创建文件。使用下面的代码段填充文件
module.exports = ''; 

注意:如果您使用的是 es6,则可以使用export default '';来避免使用 Eslint 标志

完成上述步骤后,您可以重新开始测试,一切顺利。

注意请记住在 中添加图像文件的不同扩展名,moduleNameMapper以便可以模拟它们。

我希望我能够提供帮助。#干杯!

对于任何研究这个问题的人。您必须安装npm install --save-dev identity-obj-proxy才能获得必要的依赖项。

"jest": {
    "moduleNameMapper": {
      ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "identity-obj-proxy"
    }
  }

我有同样的问题,我解决了如下:

  1. npm install -D jest-transform-stub
  2. 然后,在 package.json 中,我添加了以下转换:

    "jest": {
        ...
        "transform": {
            ...
            ".+\\.(css|scss|png|jpg|svg)$": "jest-transform-stub"

如果你想在 webpack 中使用 jest,你需要明确地配置它。在此处查看本指南:http : //facebook.github.io/jest/docs/en/webpack.html