Jest.js 如何在RTL中使用异步用户事件时消除ACT错误?

6ie5vjzr  于 2023-05-21  发布在  Jest
关注(0)|答案(1)|浏览(196)

我决定创建一个简单的井字游戏来练习测试,但是在我写的第一个测试之后,我得到了这个恼人的行为警告。我的代码不是异步的,所以我不知道如何解决它。
下面是组件代码:

const Board = () => {

    const [currentSign,setCurrentSign] = useState<"cross" | "circle">("cross")
    const [board, setBoard] = useState (new Array(9).fill(null))

  const handleUserClick = (e:React.MouseEvent<HTMLDivElement>) => {
        // @ts-ignore
      if (board[e.target.dataset.number] !==null) return
      // @ts-ignore

        // @ts-ignore
        setBoard(p=>p.map((el,i)=>i===+e.target.dataset.number?currentSign:el))
        setCurrentSign(p=>p==="cross"?"circle":"cross")
  }

    return (
        <div onClick={handleUserClick} data-testid="board" className="board">
            {new Array(9).fill(null).map((_,i)=>(
                <div key={i} data-number={i} data-testid="board-child" className={
                    `board-child 
                     ${board[i] === null ? "" : board[i] === "cross" ? "cross" : "circle"}`}/>
                ))}
        </div>
    );
};

下面是测试:

test("when user clicks second time, the clicked element gets 'circle' class", async () => {
            render(<Board />);

        const boardChildren = screen.getAllByTestId("board-child");
            await user.click(boardChildren[0]);
            await user.click(boardChildren[1]);
            expect(boardChildren[1]).toHaveClass("circle");
    });

测试通过,但留下行为警告

enxuqcxy

enxuqcxy1#

好吧,结果是RTL内部错误,解决方案是将RTL更新到最新(v14)版本。

相关问题