reactjs - 测试时,我应该如何在具有状态钩子的功能性有状态组件中模拟状态?
问题描述
如果我有一个使用状态挂钩的有状态功能组件,我如何从组件外部操作状态?我希望能够在我的测试中更改状态,以便我可以测试 dom 如何更改。
我希望能够从组件外部更改类似这样的值:
const [sent, setSent] = useState(false);
解决方案
我不会测试组件的内部状态,而是测试这个状态可能代表什么。状态的使用是一个实现细节,您应该测试规范是否正确实现,而不是如何实现。
在您的情况下,我将使用以下方法:
- 调用应该设置发送状态的功能(按钮单击,表单提交)
- 测试您的组件中是否正确处理了发送的状态(显示成功消息?)
可以使用 mock 来测试 api 调用的加载状态。如果您不使用一些花哨的库而只是正常工作await apiCall()
,那么您可以使用以下方法:
- 模拟你的 api 调用(你可能已经这样做了)
Promise()
从无法解析的模拟中返回 a
酶的例子:
import { apiCall } from '../api';
jest.mock('../api');
// ...
it('Contains a <Loading /> on loading', () => {
// The promise won't be resolved so the loading state will persist
apiCall.mockReturnValue(new Promise(() => null));
// await act... and wrapper.update() might not be needed
// depending on your implementation
await act(async () => {
wrapper.find(SubmitButton).simulate('click');
});
wrapper.update();
expect(wrapper.find(Loading)).toHaveLength(1);
});
推荐阅读
- javascript - 为什么“this”不等于调用函数的对象?
- c++ - 使用多个sampler2D一次使用一个发送多个纹理?
- html - CSS 弹性盒 | 修复 Flex 列高度之间的空间
- file - 无法在 codeigniter 中显示文件验证错误消息
- python - 从 axios 传输到 django 的文件大小发生变化
- java - 仅显示数组中的唯一项
- bash - join 命令将匹配字段作为新行插入,如何为每个匹配生成单行?
- bash - 在 Bash 中,当它已经被重定向时如何打印到标准输出?
- java - 如何将 groupingBy 放入 Map 并更改键类型
- opcode - z80 的操作码布局有什么模式吗?