【发布时间】:2025-12-31 05:40:10
【问题描述】:
useEffect 通常使用 Promises 来更新状态。
此更新会导致长时间警告:Warning: An update to null inside a test was not wrapped in act(...).
对于这种情况如何正确编写 Jest Test?
活生生的例子,可重现的例子:
https://codesandbox.io/s/jest-test-for-useeffect-with-promises-spieq?file=/index.test.js
index.test.js
import React from "react";
import Hello from "./Hello";
import { create, act } from "react-test-renderer";
it("works", () => {
let root;
act(() => {
root = create(<Hello />);
});
// console.log("From test:", );
let repr = JSON.stringify(root.toJSON());
expect(repr).toBe('{"type":"span","props":{},"children":["Hello! "]}');
});
你好.js
import React, { useState, useEffect } from "react";
export default () => {
const [count, setCount] = useState();
useEffect(() => {
Promise.resolve({}).then(() => setCount(4));
}, []);
return <span>Hello! {count}</span>;
};
更新 1:
propasal 之一的结果相同:
【问题讨论】:
-
请在您正在使用的相关代码的问题中包含minimal, complete, and reproducible code example 作为代码 sn-p。指向外部资源的链接往往会在一段时间后失效。代码应包含在您的问题中,供未来的读者阅读。
-
@DrewReese 我将链接附加到完全复制的沙盒
标签: javascript reactjs react-hooks jestjs react-test-renderer