You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:25:41