Jest与Enzyme测试TileGrid组件失败求助:断言.tile-grid__container存在却不通过
排查TileGrid组件测试断言失败的问题
从你提供的调试信息和代码来看,明明渲染结果里存在.tile-grid__container元素,但断言却失败,大概率是以下几个常见问题导致的,咱们一个个排查:
1. 断言方法名写错了(最可能的原因)
Jest的内置匹配器里没有toHaveLengthOf这个方法,正确的方法是toHaveLength!这是很容易犯的笔误,直接导致断言不通过,和元素是否存在无关。
把你的断言代码改成下面这样试试:
expect(wrapper.find('.tile-grid__container')).toHaveLength(1);
2. 浅渲染的局限性(可能性较低)
虽然你的debug输出显示了目标元素,但如果.tile-grid__container是由TileGrid内部的子组件渲染出来的,shallow浅渲染可能在某些场景下没有完全解析子组件的渲染结果(不过从你的debug输出看已经渲染出来了,这个可能性不大)。可以临时换成mount全渲染验证:
// 记得先导入mount:import { mount } from 'enzyme'; wrapper = mount(<TileGrid {...defaultProps} />);
3. 异步渲染未等待完成
如果TileGrid组件内部有异步逻辑(比如请求数据后再渲染容器),beforeEach里的渲染可能还没等组件完成更新就执行了断言。这种情况需要等待组件更新:
it('it displays the tile grid container', async () => { await waitFor(() => { expect(wrapper.find('.tile-grid__container')).toHaveLength(1); }); });
(需要确保你已经导入了waitFor:import { waitFor } from '@testing-library/react';,或者用Enzyme的wrapper.update()强制更新组件)
4. 类名拼写校验
再仔细核对下debug输出里的类名和你断言的是否完全一致,比如有没有多余空格、大小写错误?从你给出的输出看是匹配的,但还是确认下更稳妥。
内容的提问来源于stack exchange,提问作者jojojohn
相关产品推荐
相关产品推荐

