【发布时间】:2020-11-29 06:37:48
【问题描述】:
我正在创建一个返回标签和子项的组件,该子项是一个函数,用于评估字段是否具有“输入”或“文本区域”类型并返回它:
export const Field = ({
fieldType,
}) => {
return (
<>
<label htmlFor={name}> {label}</label>
{() => {
switch (fieldType) {
case 'textarea':
return (
<textarea
/>
);
default:
return (
<input/>
);
}
}}
</>
);
};
我喜欢通过创建组件的快照来开始我的测试
describe('Unit testing: <Field /> component', () => {
test('Should render correctly ', () => {
const wrapper = shallow(<Field fieldType='textarea' />);
expect(wrapper).toMatchSnapshot();
});
});
这是我的快照的结果(我正在使用酶转 json):
exports[`Unit testing for Field component Should render correctly 1`] = `
<Fragment>
<label
htmlFor="testField"
>
Test Label
</label>
<Component />
</Fragment>
`;
正如你所看到的,孩子已经被渲染了,这对我来说非常模糊......我想知道我怎样才能准确地测试我的组件是否真的在渲染输入或文本区域......
【问题讨论】:
-
我的快照显示了一个
,我想知道我可以做些什么来测试我的 是返回输入还是文本区域! -
当您使用
shallow时,您明确表示您对正在测试的组件的任何子组件不感兴趣。请改用mount。 -
测试起来可能很尴尬,因为使用起来也很尴尬。测试的一个好处是它们揭示了测试代码中的问题。为什么它首先具有功能孩子?子函数在 React 中可用,但不能在将提供给渲染器的地方使用。
标签: javascript reactjs testing jestjs enzyme