【发布时间】:2018-08-06 00:35:15
【问题描述】:
在我的componentDidMount 的React.Component 实例中,我有一个fetch() 调用,响应调用setState。
我可以模拟请求并使用 sinon 进行响应,但我不知道 fetch 何时会解决它的承诺链。
componentDidMount() {
fetch(new Request('/blah'))
.then((response) => {
setState(() => {
return newState;
};
});
}
在我使用jest 和enzyme 的测试中:
it('has new behaviour from result of set state', () => {
let component = mount(<Component />);
requests.pop().respond(200);
component.update() // fetch() has not responded yet and
// thus setState has not been called yet
// so does nothing
assertNewBehaviour(); // fails
// now setState occurs after fetch() responds sometime after
});
我是否需要刷新 Promise 队列/回调队列或类似的东西?我可以通过超时重复检查 newBehaviour,但这并不理想。
【问题讨论】:
-
你在单元测试期间是否在进行实际的 api 调用来获取数据?
-
不,如问题中所述,我使用 Sinon.js 将其存根。
标签: javascript reactjs unit-testing jestjs enzyme