gpt4 book ai didi

reactjs - 如何使用 React Jest 时间旅行到动画结束

转载 作者:行者123 更新时间:2023-12-03 14:31:40 24 4
gpt4 key购买 nike

我正在尝试测试一个在 TweenMax 动画之后改变状态的组件。浏览器上一切正常,但我无法理解如何为其编写测试。

问题是Jest不会等待动画完成,因此状态不会改变。

我也尝试过 jest.runAllTicks()jest.runAllTimers()

这里有一些代码最终会模拟我正在做的事情:

组件

class HelloWorld extends React.Component {
constructor(props) {
super(props);
this.state = { done: false };
this.p;
}

componentDiDMount() {
TweenMax.to(ReactDOM.findDOMNOde(this.p), 1, {
onComplete: () => {
this.setState({ done: true })
}
})
}

renderMessage() {
if (this.state.done) {
return "Hello World";
} else {
return "Loading...";
}
}

render () {
return <p ref={p => this.p = p}>{this.renderMessage()}</p>;
}
}

测试(基本结构)

describe("test",()=>{
it("works", ()=>{
const component = mount(<HelloWorld />);
// ...wait some time (or pretend to)
expect(component.find(p).text()).toEqual("Hello World");
})
})

最佳答案

深入研究Jest文档,我发现您可以指定一个done参数,该参数将强制测试等待done()被调用。

这样就可以设置超时并等待动画完成。

参见Jest callbacks documentation

describe("test",() => {
it("works", done => {
const component = mount(<HelloWorld />);
setTimeout(() => {
expect(component.find(p).text()).toEqual("Hello World");
done();
}, 1100);
})
})

关于reactjs - 如何使用 React Jest 时间旅行到动画结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50367224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com