在React中通过单元测试进行API调用?

时间:2017-01-06 16:28:46

标签: jquery ajax reactjs mocha enzyme

我正在使用酶,摩卡,柴和sinon为我的组件编写单元测试。在我的组件中,我导入了一个用jQuery构造API调用的库,并在我的组件中使用它,如下所示:

CategoryTree

_getCategoriesFromServer() {
        const _this = this;
        sdk.getJSON(_this.props.sdkPath, {
            itemsperpage: 10000
        }).done(function(data) {
            _this.setState({
                isLoaded: true,
                categories: _this.state.categories.concat(data)
            });
        }).fail(error => {
            console.log('ERROR', error);
        });
    }

我在componentDidMount中调用此方法。我遇到的问题是测试。我正在使用伊斯坦布尔进行测试覆盖,我注意到无论我做什么,AJAX调用都不成功。以下是其中一项测试:

it('should call componentDidMount', () => {
            sinon.spy(CategoryTree.prototype, 'componentDidMount');
            wrapper = mount(<CategoryTree {...props} />);
            expect(CategoryTree.prototype.componentDidMount.calledOnce).to.be.true;
            console.log(wrapper.props());
            console.log(wrapper.state());
            console.log(wrapper.debug());
        });

当此测试运行时,它会在终端中返回此错误:

ERROR { readyState: 0,
  getResponseHeader: [Function: getResponseHeader],
  getAllResponseHeaders: [Function: getAllResponseHeaders],
  setRequestHeader: [Function: setRequestHeader],
  overrideMimeType: [Function: overrideMimeType],
  statusCode: [Function: statusCode],
  abort: [Function: abort],
  state: [Function: state],
  always: [Function: always],
  then: [Function: then],
  promise: [Function: promise],
  pipe: [Function: then],
  done: [Function: add],
  fail: [Function: add],
  progress: [Function: add],
  complete: [Function: add],
  success: [Function: add],
  error: [Function: add],
  responseJSON: undefined,
  status: 0,
  statusText: 'error' }

调用在应用程序中按预期工作,而不是在测试中。有这个原因吗?

编辑:忘记提及_getCategoriesFromServer方法在CategoryTree组件中。

0 个答案:

没有答案