大多数人都在寻找如何摆脱act()
测试中的反应错误。我想知道相反。我有导致状态变化的代码。该状态更改应该触发react中的重新渲染(确实如此)。但是,我没有 act() 包装该状态更改,并且没有发出 act() 错误。为什么是这样?
考虑以下愚蠢的组件:
export function SweetTextboxBro() {
const [text, setText] = React.useState("");
return (
<>
<input
type="text"
role="input"
name="sweetbox"
onChange={(evt) => {
setText(evt.currentTarget.value);
}}
value={text}
/>
<p>{text}</p>
</>
);
}
现在,考虑这个最小的测试:
import * as React from "react";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { SweetTextboxBro } from "../SweetTextboxBro";
import { sleep } from "../timing";
test("it emits act errors", async () => {
render(<SweetTextboxBro />); // should internally call act()
const textbox = screen.getByRole("input");
const input = "weeee";
// begin state change!
userEvent.type(textbox, input);
await sleep(200);
// state updated! the DOM has changed! but no act() error... is emitted
expect(await screen.findByText(input)).toBeInTheDocument();
});
当 react 在 act() 调用之外重新渲染内容时,会发生动作错误。我不清楚为什么这种情况不适用。