使用React测试库在实例上使用服务测试React-redux组件

时间:2019-05-28 07:36:05

标签: javascript reactjs react-testing-library

我有一个组件可以从我的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 });
      });
  }

因此,我基本上想要检查的是底层组件是否以新状态调用,而该新状态在我的模拟服务中返回。

0 个答案:

没有答案