【问题标题】:Stub a closure function using sinon for redux actions使用 sinon 为 redux 操作存根闭包函数
【发布时间】: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) }) })

但不知何故,这个函数并没有被嘲笑。你能建议我正确的方法吗?

【问题讨论】:

    标签: reactjs mocha.js redux sinon


    【解决方案1】:

    您需要对正在调用的库中的实际函数进行存根,而不仅仅是创建具有相同名称的存根。

    在您的测试中将以下内容添加到您的导入中:

    import * as reduxFetchHelpers from 'redux-fetch-helpers';
    

    然后在您的测试主体中,将您当前的存根代码替换为:

    const fetchActionCreator = sinon.stub(reduxFetchHelpers, 'fetchActionCreator');
    fetchActionCreator.returns(expectedAction);
    

    我没有测试过这段代码,但它看起来应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2020-03-29
      • 1970-01-01
      相关资源
      最近更新 更多