我是 Jest/React 初学者。开玩笑地说it
,我需要等到所有承诺都执行完毕后再进行实际检查。
我的代码与此类似:
export class MyComponent extends Component {
constructor(props) {
super(props);
this.state = { /* Some state */ };
}
componentDidMount() {
fetch(some_url)
.then(response => response.json())
.then(json => this.setState(some_state);
}
render() {
// Do some rendering based on the state
}
}
当组件被挂载时,render()
运行两次:一次在构造函数运行后,一次在fetch()
(in componentDidMount()
) 完成并且链式 Promise 完成执行后)。
我的测试代码与此类似:
describe('MyComponent', () => {
fetchMock.get('*', some_response);
it('renders something', () => {
let wrapper = mount(<MyComponent />);
expect(wrapper.find(...)).to.have.something();
};
}
无论我从什么返回it
,它都会在第一次render()
执行之后但在第二次之前运行。例如,如果我 return fetchMock.flush().then(() => expect(...))
,则返回的承诺在第二次调用之前执行render()
(我相信我能理解为什么)。
我怎样才能等到第二次render()
被调用再运行expect()
?