javascript - 将 Setter 函数传递给子组件时的单元测试 UseState
问题描述
下面我有一个 UseState 钩子的示例,其中它的 setter 函数 ( setInputs ) 被传递给子组件 ( LoginForm )。
我在单元测试中遇到问题,我无法模拟更改setInputs
,因此无法断言调用了调度。
如何模拟对setInputs
道具的更改以更新inputs
测试中的状态?
零件:
const Login = () => {
const [inputs, setInputs] = useState({ email: '' });
const handleSubmit = event => {
event.preventDefault();
if (!inputs.email) {
return;
}
// Cannot Assert this
dispatch(requestAuthentication(inputs.email));
};
return (
<LoginForm
setInputs={setInputs}
handleSubmit={handleSubmit}
/>
);
};
export default Login;
**登录表单 **
是比onChange输入的基本形式调用以下函数
const handleInputChange = event => {
event.persist();
props.setInputs(input => ({
...input,
[event.target.name]: event.target.value,
}));
};
单元测试:
it('should return if no email is entered', () => {
useDispatch.mockImplementation(() => jest.fn());
useSelector.mockImplementation(() => jest.fn());
requestAuthentication.mockImplementation((data, callback) => {
callback();
});
const wrapper = shallow(
<Login>
<LoginForm {...props} />
</Login>
);
wrapper
.find('LoginForm')
.props()
.handleSubmit({
preventDefault: () => {},
});
expect(requestAuthentication).not.toHaveBeenCalled();
});
解决方案
推荐阅读
- swift - 从 uiview 的子类中的 CGPoint 线更改颜色
- syntax - 这个变量的语法应该写什么?
- r - 如何绘制包含 4 只股票回报的 XTS?
- algorithm - 为什么这是这个时间复杂度分析问题的答案?
- javascript - 尝试填充多选下拉列表时出现“具有相同键的两个孩子”错误
- ruby-on-rails - 来自控制台的 ActionCable.server.broadcast 始终返回 0
- rust - 如何从单击按钮的条目中获取信息?
- c# - 从 JSON 加载时不保留类之间的引用
- r - 我正在尝试创建基于条件变量确定事件之间时间的功能
- javascript - Heroku 部署 React 客户端在指定 localhost 时因 Axios 失败后