reactjs - 如何使用 Jest & Enzyme 模拟 React 无状态柯里化函数
问题描述
我有这个无状态的 React 组件:
...
const Providers = ({ onSelectFeedProvider, ... }) => {
const handleSelectFeedProvider = value => e => {
e.preventDefault();
onSelectFeedProvider({ target: { value } });
};
return {
<Row onClick={handleSelectFeedProvider(1)}>
...
</Row>
}
}
和测试:
import Row from 'components/Common/Row';
import Providers from './index';
jest.mock('components/Common/Row', () => 'Row');
let onSelectFeedProviderSpy = jest.fn();
let onSelectProviderSpy = jest.fn();
const initialProps = {
feedProvider: 0,
onSelectFeedProvider: () => onSelectFeedProviderSpy(),
selectedProvider: undefined,
onSelectProvider: () => onSelectProviderSpy()
};
const mockComponent = props => {
const finalProps = { ...initialProps, ...props };
return <Providers {...finalProps} />;
};
it('should call correctly', () => {
const wrapper = shallow(mockComponent());
wrapper.find(Row).simulate('click', 'what do I have to do here');
expect(onSelect).toHaveBeenCalledTimes(1);
});
如何正确调用该方法并通过覆盖?我想已经尝试了所有的可能性。有什么想法吗?
解决方案
你没有很多选择,一种方法是onSelect
注射
const Component = ({onSelect}) => {
const handleSelect = value => e => {
e.preventDefault()
onSelect && onSelect({ target: { value } })
}
return <Row onClick={handleSelect(1)} />
}
测试
it('should call correctly', () => {
const spy = jest.fn()
const wrapper = shallow(mockComponent({onSelectProvider: spy}));
wrapper.find(Row).simulate('click', 'what do I have to do here');
expect(spy).toHaveBeenCalledTimes(1);
});
推荐阅读
- python - 可以移动鼠标但不能用 pyAutoGui 点击
- sql-server - 复杂的数据透视到行和列
- javascript - 如何在 javascript 页面加载时使用 AJAX 一次获取多个文件的内容?
- database - 重命名文档数组中的子文档字段
- javascript - 如何在 EJS 模板中显示这个?
- node.js - 将 Google Trends API 数据解析为 JSON 格式
- r - 循环通过 columnames 以使用 R-Package formattable kableExtra (R dplyr) 格式化列
- jquery - 如何在动态网格中通过jquery获取复选框的值?
- linux - bash中的奇怪日期行为
- ace - ACE_TAO + OpenSSL - 服务器初始化问题