big*_*ato 11 reactjs jestjs enzyme
我有一个Logo组件:
import React from "react";
import logo from "assets/images/logo.png";
const Logo = () => {
return <img style={{ width: 50 }} src={logo} alt="logo" />;
};
export default Logo;
Run Code Online (Sandbox Code Playgroud)
测试文件:
import React from "react";
import Logo from "components/shared/Logo";
describe("<Logo />", () => {
it("renders an image", () => {
const logo = shallow(<Logo />);
expect(logo.find("img").prop("src")).toEqual("blahh");
});
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,会出现一些奇怪的错误:
$ NODE_PATH=src jest
FAIL src/tests/Logo.test.js
? <Logo /> › renders an image
TypeError: val.entries is not a function
at printImmutableEntries (node_modules/expect/node_modules/pretty-format/build/plugins/immutable.js:44:5)
at Object.<anonymous>.exports.serialize (node_modules/expect/node_modules/pretty-format/build/plugins/immutable.js:178:12)
Run Code Online (Sandbox Code Playgroud)
我该如何测试图像src ==="assets/images/logo.png"?
小智 12
我想您__test__在Logo组件附近的目录中编写测试.
无论如何,相对于您的测试文件导入您的"assets/images/logo.png".
如果您的项目结构是这样的
Project
??? assets
? ??? images
? |
? ??? logo.png
??? src
? ??? components
? |?? Logo.js
? ??? __tests__
? |?? logo.test.js
?
首先,就像我通过输入以下内容将导入图像导入到logo.test.js中:
import React from 'react';
import {shallow} from 'enzyme';
import Logo from "./../Logo";
import logoImage from "./../../../assets/images/logo.png;
describe("<Logo />", () => {
it("renders an image", () => {
const logo = shallow(<Logo />);
expect(logo.find("img").prop("src")).toEqual(logoImage);
});
});
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这些信息没有被清楚地突出显示。在“与 wepack 集成”部分,它展示了如何使用以下命令自动模拟静态资产transform:
如果 moduleNameMapper 不能满足您的要求,您可以使用 Jest 的转换配置选项来指定资产的转换方式。例如,一个返回文件基名的转换器(比如 require('logo.jpg'); 返回 'logo')可以写成:
包.json
{
"jest": {
"transform": {
"\\.(js|jsx)$": "babel-jest",
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/fileTransformer.js"
}
}
}
Run Code Online (Sandbox Code Playgroud)
文件转换器.js
const path = require('path');
module.exports = {
process(src, filename, config, options) {
return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
},
};
Run Code Online (Sandbox Code Playgroud)
因此,这将使您wrapper.props().src成为一个字符串(可用于任何类型的匹配器,如.toEqual)。这也意味着expect(wrapper).toMatchSnapshot()也像尊重图像路径的魅力一样工作。
[更新] 不要错过"babel-jest"在配置中为 JS/JSX 文件指定转换
| 归档时间: |
|
| 查看次数: |
12196 次 |
| 最近记录: |