使用 sinon 为 redux 操作存根闭包函数
Posted
技术标签:
【中文标题】使用 sinon 为 redux 操作存根闭包函数【英文标题】:Stub a closure function using sinon for redux actions 【发布时间】:2017-02-21 12:46:32 【问题描述】:我有一个对 API 进行异步调用的 redux 操作。
从 "../errors" 导入 ForbiddenRequest, APIError 从“redux-fetch-helpers”导入 fetchActionCreator 出口常量 ADD_CART_ITEMS = "ADD_CART_ITEMS" 导出默认函数 addCartItems(items, authToken) 返回 fetchActionCreator( url: `$API_BASE/ajax_cart`, //eslint-disable-line no-undef 获取选项: 方法:“POST”, 标头:新标头( “授权”:`jwt $authToken`, “接受”:“应用程序/json”, “内容类型”:“应用程序/json”, ), 正文:JSON.stringify(项目), 凭据:“同源”, , 动作类型:ADD_CART_ITEMS, 响应配置: 200: (resp => resp), 403:(有效负载=>新的ForbiddenRequest(有效负载)), 其他:(有效负载 => 新 APIError(有效负载)), )
我正在尝试使用 sinon 存根来模拟 fetchActionCreator 方法。 这是我的规范文件
从“../../actions/addCartItems”导入 addCartItems 从 "sinon" 导入 sinon describe("addCartItems 操作", () => 让 fetchActionCreator it("应该创建一个将商品添加到购物车的操作", () => 常量添加CartItem = 项目:[product_variant:10,数量:1] const expectedAction = type: "ADD_CART_ITEMS", meta: sequence: "BEGIN" fetchActionCreator = sinon.stub() // fetchActionCreator() fetchActionCreator.returns(expectedAction) 期望(addCartItems(addCartItem,“someToken”)).to.equal(expectedAction) ) )但不知何故,这个函数并没有被嘲笑。你能建议我正确的方法吗?
【问题讨论】:
【参考方案1】:您需要对正在调用的库中的实际函数进行存根,而不仅仅是创建具有相同名称的存根。
在您的测试中将以下内容添加到您的导入中:
import * as reduxFetchHelpers from 'redux-fetch-helpers';
然后在您的测试主体中,将您当前的存根代码替换为:
const fetchActionCreator = sinon.stub(reduxFetchHelpers, 'fetchActionCreator');
fetchActionCreator.returns(expectedAction);
我没有测试过这段代码,但它看起来应该可以工作。
【讨论】:
以上是关于使用 sinon 为 redux 操作存根闭包函数的主要内容,如果未能解决你的问题,请参考以下文章