使用 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 操作存根闭包函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sinon 存根 new Date()?

用 sinon 存根,用 chai 测试

Sinon中JSON模块的存根独立函数

需要帮助在 NodeJS 中使用 Sinon 存根异步 / 等待承诺

轻松清理 sinon 存根

使用 Sinon 存根 window.location.href