我在使用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
答案 0 :(得分:4)
之所以发生此问题,是因为开玩笑无法解决我认为在您的项目中由Webpack处理的SVG导入。
经过一番阅读,我遇到了以下软件包,该软件包专门用于测试此类导入。
安装此软件包:
npm install --save-dev identity-obj-proxy
将jest.config
中的moduleNameMapper更新为以下内容:
moduleNameMapper: {
".+\\.(svg|png|jpg)$": "identity-obj-proxy"
}
答案 1 :(得分:0)
我正在为应用程序使用Create React App。
最后,此选项对我来说可以导入svg,在package.json中提供以下选项:
"jest": {
"transform": {
"^.+\\.[jt]sx?$": "babel-jest",
"^.+\\.svg$": "jest-transform-stub"
},
"moduleNameMapper": {
"^.+.(svg|png|jpg)$": "jest-transform-stub"
}
},
安装jest-transform-stub模块。