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

React Jest测试中App组件更新未包裹act()警告,求解决方案

React Jest测试中act警告的消除求助

运行React的Jest测试时,测试虽能成功通过,但会返回如下警告:

console.error
    Warning: An update to App inside a test was not wrapped in act(...).
    
    When testing, code that causes React state updates should be wrapped into act(...):
    
    act(() => {
    /* fire events that update state */
    });
    /* assert on the output */

警告指向的代码片段:

const handleFirstNumberChange = (e: React.ChangeEvent<HTMLInputElement>) => {
        setFirstNumber(
        ^
        e.target.value !== '' ? Number(e.target.value.replace(/\D*/g, '')) : null
    );
};

我的环境配置:

  • node: 16.14.2
  • npm: 8.5.5
  • jest: 29.3.1
  • react-test-renderer: 18.2.0
  • react: 18.2.0
  • react-dom: 18.2.0
  • react-scripts: 5.0.1
  • @testing-library/jest-dom: 5.16.5
  • @testing-library/react: 13.4.0
  • @testing-library/user-event: 14.4.3

测试代码:

import React from 'react';
import { act } from 'react-dom/test-utils';
import { render, screen, RenderResult, waitFor} from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import App from '../pathToDirectory/App';

describe('My tests', () => {
  it('Should display xx', async () => {
    render(<App />);

    await userEvent.type(screen.getByLabelText('Number A'), '123');
    await userEvent.type(screen.getByLabelText('Number B'), '321');
    await userEvent.click(screen.getByRole('button'));

    await waitFor(() => {
        expect(screen.getByText('xx')).toBeInTheDocument();
    });
  });
});

目前我已查阅过React官方act文档、多篇社区技术文章及Stack Overflow相关问答,但所有方案均未解决问题,恳请各位提供消除该警告的有效建议。

内容的提问来源于stack exchange,提问作者Jorge Mauricio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:38:03