我有一个组件可以从我的Redux商店获取90%的道具。 它的实例上有一个服务,负责获取,解析和缓存PDF。
我以前在Enzyme中所做的就是模拟服务,因为我不想在测试中进行这些调用,因为我是在隔离测试服务的情况下进行的。因此,我只是检查该服务上是否调用了正确的方法。
我可以与原型混合一些以在组件安装中实现相同的目的。但是,唯一可以触发我更新操作的是我的redux道具
componentDidUpdate(prevProps) {
const { pageNumbersToShow, answersToShow } = this.props; // All from redux
const { pageNumbersToShow: prevPages, answersToShow: prevAnswers } = prevProps;
const navigationOccurred = pageNumbersToShow !== prevPages;
const answerVisibilityChanged = answersToShow.some((value, index) => value !== prevAnswers[index])
|| prevAnswers.some((value, index) => value !== answersToShow[index]);
this.setPages(navigationOccurred, answerVisibilityChanged);
}
setPages执行以下操作,并将此新状态赋予基础组件。
setPages(bookChanged, answersChanged) {
const promises = [];
promises.push(bookChanged ? this.getPages() : Promise.resolve());
promises.push(answersChanged ? this.getAnswerPages() : Promise.resolve());
Promise.all(promises)
.then(([bookPages, answerPages]) => {
const newState = {};
if (bookPages) newState.bookPages = bookPages;
if (answerPages) newState.answerPages = answerPages;
if (isLastUpdate()) {
this.setState(newState);
}
})
.catch(err => {
this.setState({ err });
});
}
因此,我基本上想要检查的是底层组件是否以新状态调用,而该新状态在我的模拟服务中返回。