[英]How to get unit test coverage of components run inside loop in React and Jest
我为组件编写了一个单元测试,该组件吐出了雾化的组件图标(来自icomoon.io构建的自定义库)。我遇到的问题是,尽管每个组件都能正确渲染; 呈现每个图标的组件的测试在检查时没有覆盖。 理想的结果是,当我'npm run test:coverage'时,如果它在测试中正确呈现,它将显示每个雾化图标组件的覆盖率。
目录
* constants
--* iconConstants.js
* components
--* iconGenerator
-----* iconGenerator.js
-----* icons
--------* icon1.js
--------* icon2.js
--------* icon3.js
* __tests__
--* iconGenerator
-----*iconGenerator.test.js
这是生成器:
import React from 'react';
import PropTypes from 'prop-types';
import cx from 'classnames';
// Constants
import { ICONS } from '../../constants/iconConstants';
const iconGenerator = (props) => {
const { type, size } = props;
const inf = ICONS[type];
return (
<span
className={ cx('ne8-icon', inf.iconCls) }
style={ { fontSize: `${size}em` } }
title={ inf.description } />
);
};
iconGenerator.defaultProps = {
size: 3,
};
iconGenerator.propTypes = {
type: PropTypes.string.isRequired,
size: PropTypes.number,
};
export default iconGenerator;
这是测试:
import React from 'react';
import ReactDOM from 'react-dom';
import iconGenerator from '../../components/iconGenerator/iconGenerator.js';
import { ICONS } from '../../constants/iconConstants';
describe('iconGenerator', () => {
const iconKeys = Object.keys(ICONS);
for (let i = 0; i < iconKeys.length; i += 1) {
it(`renders ${iconKeys[i]} symbol without crashing`, () => {
const div = document.createElement('div');
ReactDOM.render(<iconGenerator type={ iconKeys[i] } />, div);
ReactDOM.unmountComponentAtNode(div);
});
}
});
当我运行test:coverage时,即使任何icon.js文件都被很好地渲染,它也显示了0的覆盖率,并且我获得了icongenerator.js文件的100%覆盖率。 有什么想法吗?
看起来您不需要或没有呈现任何图标文件,只是一个具有许多不同类型的iconGenerator
组件,然后便可以更改类名。 要覆盖各种icon*.js
,您需要要求/渲染它们,也可以循环执行。
更高层次上,我不确定您的图标生成器如何实际“生成”图标,它看起来像呈现跨度的常规ol'组件。 当然,绝对可行! 但这不是在创建其他组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.