我正在使用酶,摩卡,柴和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组件中。