reactjs - 对组件的 fetchdata 的反应测试返回“无法读取未定义的属性 'catch'”
问题描述
我有一个fetchData
使用 Promise.all 的组件,其中包含一个捕获,fetchBloomreachData
因此即使fetchBloomreachData
失败,另一个承诺也可以继续。
如果 fetchBloomreachData 拒绝,它仍应等待 newSearch 解决。但基本上如果 newSearch 失败 fetchBloomreachData 是无关紧要的。因此,即使 fetchBloomreachData 失败,newSearch 仍应继续。如果 newSearch 失败,那么它不应该。
我忽略了什么吗?我第一次看到这个错误发生在我身上。
ProductListing.fetchData = ({ dispatch }, rawParams, location, clubId) => {
const nextQuery = getListingParams(rawParams, location.query);
return Promise.all([
dispatch(newSearch(nextQuery, clubId, location)),
dispatch(fetchBloomreachData(nextQuery, location.pathname)).catch(() => {})
]);
};
添加捕获后,此测试失败并且测试说cannot read property 'catch' of undefined
it("should fetchBloomreachData", () => {
const ProductListing = require("src/components/product-listing").ProductListing;
const bloomreachStub = sinon.stub(listingActions, "fetchBloomreachData").resolves();
const dispatchStub = sinon.stub();
ProductListing.fetchData(
{ dispatch: dispatchStub },
{ searchTerm: "" },
{ pathname: "/b/1234" },
{}
);
expect(bloomreachStub).to.have.been.calledWith({ searchTerm: "" }, "/b/1234");
});
解决方案
能够通过更新到使其dispatchStub
工作const dispatchStub = () => Promise.resolve();
it("should fetchBloomreachData", () => {
const ProductListing = require("src/components/product-listing").ProductListing;
const bloomreachStub = sinon.stub(listingActions, "fetchBloomreachData").resolves();
const dispatchStub = () => Promise.resolve();
ProductListing.fetchData(
{ dispatch: dispatchStub },
{ searchTerm: "" },
{ pathname: "/b/1234" },
{}
);
expect(bloomreachStub).to.have.been.calledWith({ searchTerm: "" }, "/b/1234");
});
推荐阅读
- java - Jmeter - 循环语句
- angular - 角度材料日期选择器返回空值
- batch-processing - Apache Flink - DataSet API - 如何将 n 个结果组合在一起
- java - Maven:编译错误包不存在。如何为maven添加额外的源目录进行编译
- android - TextView 和 Button 卡在 android studio 蓝图的左上角
- python - 如何使用elasticsearch-dsl在所有索引中找到数组中的不同值?
- django - 我在 django 中使用 Angular 1.6,如果我刷新页面 django 提供 html 文件但控制器没有加载
- xml - 如何在 Excel 中使用 VBA 查找重复项并分别列出它们?
- go - protoc 命令不适用于 go generate
- javascript - 第一次使用angularjs 1.6未在treeview kendo ui中选中父子复选框