当我创建这个问题时,我怀疑的是如何使用mocha / enzyme / chai / sinon测试异步请求。
我确信有不同的方法,但可能的方法是使用手工函数来模拟它,返回适当的值(检查答案的详细信息)。
我的getInitialState方法是这样的:
getInitialState: function() {
var me = this;
var documentData = null;
var promise = me.getDocuments();
promise.then(function(value) {
var documents = value.map(function(obj) {
return Object.keys(obj).sort().map(function(key) {
return obj[key];
});
});
documentData = documents;
});
return ({
cd: false
});
},
返回promise的getDocuments()函数是:
getDocuments: function() {
var deferred = when.defer();
Collection.fetch({cd: workspaceInfo.getCD()}).then(
function(results) {
deferred.resolve(results);
},
deferred.reject
);
return deferred.promise;
},
我如何成功地测试它?
我是否必须模拟getInitialState方法本身? (即便可能)
或者只是带有一些可预测返回值的getDocuments函数?
在此先感谢,任何帮助将不胜感激。
答案 0 :(得分:0)
我通过要求Collection(这是一个从数据库中带来一些值的rest API)解决了这个问题
var Collection = require("path/to/my/collection/Collection");
之后,我在我的getDefaultProps()方法中使用它:
getDefaultProps() {
return {
Collection: new Collection()
};
},
这反过来使我能够编写初始化模拟集合的测试(fileDataResponse是带有一些数据的JSON):
var CollectionMock= {
fetch: () => {
return {
then: callback => callback(fileDataResponse)
};
}
};
然后在我的测试中使用它:
it("should open the modal without a loaded configuration", function() {
var instance, wrapper;
wrapper = mount(
<DocumentPreview
Collection={CollectionMock}/>
);
instance = wrapper.component.getInstance();
instance.openModal();
expect(wrapper.find('#MockedTest' + 'docOid251085').exists()).to.equal(true);
wrapper.unmount();
});