我对查询元素何时/如何更新感到困惑。例如:
我有一个计数的按钮。当它数到 3 时,它就消失了。
import React, { useState } from "react";
export default () => {
const [count, setCount] = useState(0);
return (
<div>
{count < 3 && (
<button onClick={() => setCount(count + 1)}>{count}</button>
)}
</div>
);
};
我正在像这样测试它:
test("Counter counts up and disappears", () => {
const { queryByText } = render(<App" />);
const button = queryByText("0");
expect(button.textContent).toEqual("0");
fireEvent.click(button);
expect(button.textContent).toEqual("1");
fireEvent.click(button);
expect(button.textContent).toEqual("2");
fireEvent.click(button);
expect(button).toBe(null);
});
测试失败并出现以下错误:
expect(received).toBe(expected)
Expected value to be (using ===):
null
Received:
<button>2</button>
为什么按钮元素知道它的文本内容发生了变化?我们不需要在每次点击后queryByText("1")
运行。queryByText("2")
为什么它不知道最后一次单击后按钮已被卸载?queryByText("3")
如果我们想检查它是否确实为空,我们确实需要这样做。
这是代码沙箱: https ://codesandbox.io/s/react-testing-library-demo-76zhi