javascript - 在使用 Jest 进行测试之前等待 React 组件状态更新
问题描述
我有一个具有handleAdd
功能的组件。该函数调用一个库,该库依次调用axios
并返回一个 Promise。一旦解决了这个问题,该handleAdd()
方法就会更新组件状态,进而呈现 child(ren)。
换句话说,它首先与服务器进行检查,以确保在本地显示之前添加了该项目。
使用 Jest 进行测试时,我必须在期望运行之前等待睡眠几毫秒,否则即使我模拟/覆盖了 api 调用,浅渲染也没有更新。承诺解决、重新渲染和期望()之间有一些延迟。这就是这种情况:
it('adds a thing', async () => {
ThingManager.default.addPlan = () => {
const response = new Promise((resolve, reject) => { resolve() })
return response;
}
const wrapper = shallow(<Home />)
wrapper.find('button').simulate('click')
const input = wrapper.find('#plan-title')
input.simulate('change', { target: { value: 'TEST ITEM' } })
await sleep(500) // without it, <Thing /> isn't rendered yet.
expect(wrapper.find('Thing').length).toBe(1)
});
这样做的正确方法是什么?
解决方案
只是想把它扔在那里,我用简单setTimeout
的组合 jest's done()
。
推荐阅读
- python - 如何在烧瓶服务器上检查现有用户的 sql 数据库
- sql - 在 presto sql 中创建 bin - 以编程方式
- excel - VBA宏,按字母顺序对列进行排序,后面有行,如何?
- typescript - 打字稿、复杂对象和联合类型
- reactjs - React 仅针对具有省略号的文本显示 Material-UI 工具提示
- directus - 无法在 Directus 中访问用户令牌
- angular - 如何比较和访问 Angular 8+ HTML 模板中的枚举变量?
- php - wordpress url中的非英文字符导致404错误
- gradle - 将 Gradle 从 Groovy 转换为 Kotlin DSL(用于 liquibase-gradle-plugin)
- c++ - 实时更新VTK点