小编cjm*_*cjm的帖子

使用 setTimeout 进行 Jest 测试挂钩状态更新

我正在尝试使用单击处理程序测试自毁组件的卸载。单击处理程序使用 setTimeout 更新 useState。

但是,我的测试失败了,而我希望它通过。我尝试使用玩笑模拟计时器,例如 AdvanceTimersByTime() 但它不起作用。如果我在 setTimeout 之外调用 setState,则测试通过。

组件.js

const DangerMsg = ({ duration, onAnimDurationEnd, children }) => {
const [isVisible, setVisible] = useState(false);
const [sectionClass, setSectionClass] = useState(classes.container);

function handleAnimation() {
    setSectionClass(classes.containerAnimated);
    let timer = setTimeout(() => {
        setVisible(false);
    }, 300);
    return clearTimeout(timer);
}

useEffect(() => {
    let timer1;
    let timer2;
    function animate() {
        if (onAnimDurationEnd) {
            setSectionClass(classes.containerAnimated);
            timer2 = setTimeout(() => {
                setVisible(false);
            }, 300);
        } else {
            setVisible(false);
        }
    }

    if (children) {
        setVisible(true);
    } …
Run Code Online (Sandbox Code Playgroud)

settimeout reactjs jestjs enzyme

4
推荐指数
1
解决办法
3758
查看次数

标签 统计

enzyme ×1

jestjs ×1

reactjs ×1

settimeout ×1