【发布时间】:2022-02-21 13:37:36
【问题描述】:
我正在渲染一个使用 setTimeout 将内部文本从加载状态更改为所需消息的元素:
function Message({ message }: any) {
const [showMessage, setShowMessage] = useState(false);
useEffect(() => {
const CTATimer = setTimeout(() => {
setShowMessage(true);
}, 1500);
return () => {
clearTimeout(CTATimer);
};
}, []);
if (!showMessage) {
return <p>Loading...</p>;
}
return (
<>
<div>{message.text}</div>
</>
);
}
相应的测试呈现,然后将时间提前 1500 毫秒,然后应该显示消息。但是,目前测试失败,终端显示文本仍然是Loading...。测试是这样写的:
const mockMessage = {
text: "this is a message",
answers: [],
id: 1,
};
afterEach(() => {
jest.useRealTimers();
});
it("should show message after setTimeout", () => {
jest.useFakeTimers();
jest.advanceTimersByTime(1500);
customRender(<Message message={mockMessage} />); // my customRender is just the default render but with a ThemeProvider wrapper.
const message = screen.getByText(/this is a message/i);
expect(message).toBeInTheDocument();
});
为什么我的测试在 1500 毫秒后仍然呈现加载状态?
【问题讨论】:
标签: javascript reactjs react-hooks jestjs react-testing-library