我有下一个问题: 在每个测试用例之前,我都会创建一个容器
const container = shallow(<Provider store={mockStore}><ReportButton{...mockProps}/></Provider>).dive();
因此,当我尝试查找()一些元素以模拟事件时,会出现错误。
在快照显示的组件本身中,而不在内部标记中。
<ReportButton
category={Array []}
count={100}
dataId=""
filter={Object {}}
fullReport={false}
isEmpty={false}
loading={false}
period_tariff_is_active={true}
type=""
/>
我简直无法进入组件内部。
一个简单的解决方案:按照Redux DOCS的建议,无需在Provider中包装就可以测试组件。 因此,您只需要为组件添加命名的导出即可,如下所示
export default connect(mapStateToProps, mapDispatchToProps)(ReportButton);
export {ReportButton};
恭喜,您现在可以测试组件了。
但是,如果您使用react-redux钩子(例如useSelect),则此技巧将不起作用,因为您的组件将自动包装在connect中。然后您将导出这样的组件:
export default ReportButton;
所以问题又回来了。 而且我不知道该如何解决。
已用软件包列表:
"react": "^16.9.0",
"redux": "^4.0.4",
"react-redux": "^7.1.1",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.2",
答案 0 :(得分:0)
我用酶测试了海关提供者。测试看起来像:
wrapper = Enzyme.shallow(
<StorageProvider storage={storageMock}>
<StorageContext.Consumer>
{(storage: StorageService | null): React.ReactElement =>
<HelperComponent storage={storage} />}
</StorageContext.Consumer>
</StorageProvider>,
);
expect(
wrapper
.dive()
.find(StorageContext.Consumer)
.dive()
.find(HelperComponent),
).toHaveLength(1);
因此您可以尝试使用.dive。
我建议的另一种解决方案是使用@testing-library/react
进行测试,因为我认为测试具体实现的组件行为更容易且有趣。