3

我在使用 SVG 精灵在组件上使用 Jest 和 Enzyme 创建快照测试时遇到问题。

我正在使用包 svg-sprite-loader:https ://github.com/kisenka/svg-sprite-loader

这是给它带来麻烦的组件:

import React from 'react';
import dieIcons from '../../public/images/dieIcons.svg';

const DieIcon = (props) => (
<svg className={`die__icon icon-${props.name}`} onMouseDown={props.onMouseDown} onMouseUp={props.onMouseUp} onMouseOut={props.onMouseOut}>
   <use xlinkHref={`#dieIcons_${props.name}`} />
</svg>);

export default DieIcon;

这是开玩笑的错误:

Test suite failed to run

/home/ubuntu/workspace/tabletop-app/public/images/dieIcons.svg:2
<svg style="display:none;">
^

SyntaxError: Unexpected token <

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:289:17)
  at Object.<anonymous> (src/components/DieIcon.js:2:17)
  at Object.<anonymous> (src/components/SingleRollDie.js:2:16)

我试图按照 Jest 的指导来处理静态资产,如下所示:

// in package.json
"jest": {
    "moduleNameMapper": {
      "modulePaths": ["/shared/vendor/modules"],
      "moduleFileExtensions": ["js", "jsx"],
      "moduleDirectories": ["node_modules", "bower_components", "shared"],
      "\\.(svg)$": "<rootDir>/src/tests/__mocks__/fileMock.js"
    }
}

最后是我项目的 GitHub 的链接:https ://github.com/deannellis/tabletop

4

2 回答 2

12

发生此问题是因为 jest 无法解决我认为在您的项目中由 webpack 处理的 SVG 导入。

经过一番阅读,我发现了以下专门用于测试此类导入的包。

安装这个包:

npm install --save-dev identity-obj-proxy

将您的 moduleNameMapper 更新jest.config为以下内容:

moduleNameMapper: {
  ".+\\.(svg|png|jpg)$": "identity-obj-proxy"
}
于 2018-09-24T15:26:23.633 回答
1

我正在为应用程序使用 Create React App。

最后,此选项适用于我导入 svgs,在 package.json 中提供以下选项:

"jest": {
    "transform": {
      "^.+\\.[jt]sx?$": "babel-jest",
      "^.+\\.svg$": "jest-transform-stub"
    },
      "moduleNameMapper": {
          "^.+.(svg|png|jpg)$": "jest-transform-stub"
      }
  },

安装 jest-transform-stub 模块。

于 2020-06-07T04:44:54.313 回答