我正在尝试使用单击处理程序测试自毁组件的卸载。单击处理程序使用 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)