Я пытаюсь протестировать компонент, который меняет состояние после анимации 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");
})
})