我在反應中有這個簡單的組件,我想測驗它,但我找不到模擬的方法setInterval來觸發計時器。
該count值0一直存在,但是當我運行組件時它正在作業。
更新:我已經在 stackblitz 上
添加了這個示例存盤庫來運行這個測驗。
這是我的測驗檔案:
import {
render,
screen
} from "@testing-library/react";
import React, { useEffect, useState } from "react";
import { expect, test, vi } from "vitest";
function Timer() {
const [count, setCount] = useState(0)
useEffect(() => {
let timer = setInterval(() => {
setCount(v => v 1)
}, 1000)
return () => clearInterval(timer)
}, [])
return <div>{count}</div>
}
test("should render correctly", () => {
vi.useFakeTimers();
render(<Timer />);
vi.advanceTimersByTime(2000);
screen.debug();
expect(screen.getByText("2")).toBeDefined();
});
uj5u.com熱心網友回復:
問題在于 vitest 無法注意到測驗期間所做的 dom 更改。dom 更新代碼應該包含在一個act來自react-dom/test-utils.
所以vi.advanceTimersByTime(2000);必須在act。
Theis是我為這個問題打開的guthub問題的鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507618.html
