React组件在Jest测试中状态变更后未重渲染问题咨询
问题:自定义Hook在Jest测试中未触发组件重渲染,状态未更新
组件代码:
const MyComponent = props => { const {price} = props; const result1 = useResult(price); return ( <div>...</div> ) }
自定义Hook代码:
export const useResult = (price) => { const [result, setResult] = useState([]); useEffect(() => { const data = [{price: price}] setResult(data); }, [price]); return result; };
Jest测试代码:
it('should ...', async () => { render( <MyComponent price={300}/>) ) await waitFor(() => { expect(...).toBeInTheDocument(); }); });
实际运行测试时,MyComponent仅渲染一次,和业务环境中渲染两次的情况不符。初始渲染时result1为空数组,按预期useResult内的useEffect执行后调用setResult(data)修改状态,应触发组件重渲染,使result1变为[{price:300}],但实际result1仍为空数组。
原本计划通过组件间接测试自定义Hook,现在怀疑自定义Hook在测试环境与业务环境表现不一致。
更新说明:
引发该异常的原因是状态突变!业务环境正常但测试环境异常,错误根源是使用push方法直接修改了作为状态变量的数组。
内容的提问来源于stack exchange,提问作者Unknown developer
相关产品推荐
相关产品推荐

