【问题标题】:Sinon anonymous stub passed as a parameter作为参数传递的 Sinon 匿名存根
【发布时间】:2016-03-23 17:03:33
【问题描述】:

我正在尝试在 redux 容器中测试一个函数,但问题几乎与 redux 或 react 无关。基本上我要测试的 fetchData 函数,将两个函数作为参数并调用它们。

我希望做的是有两个匿名存根并以这种方式将它们传递给函数:

var firstStub = sinon.stub().withArgs(mockResponse).returns('success');
var secondStub = sinon.stub().withArgs(mockResponse).returns('success');
AccountApp.fetchData({ firstStub , secondStub });

当这种情况发生时,我的函数 fetchData 抱怨 firstStub 和 secondStub 不是一个函数。我知道它们是存根对象,但如果是这种情况,那么管理这种情况的正确方法是什么。

【问题讨论】:

  • 看到{ firstStub , secondStub } 的论点我有点惊讶——也就是说,你正在传递一个对象{ firstStub: firstStub, secondStub: secondStub }——你真的想这样做吗?
  • 是的,我也对此感到有些惊讶,老实说,我不知道为什么有人这样做。您认为这可能是问题的根源吗?
  • 嗯,这似乎是问题,现在它工作正常,但不知道为什么?

标签: javascript unit-testing reactjs redux sinon


【解决方案1】:

将存根传递为

AccountApp.fetchData({ firstStub , secondStub });

似乎是罪魁祸首,因为这意味着您实际上(在 ES6 脱糖之后)调用了这个:

AccountApp.fetchData({ firstStub: firstStub, secondStub: secondStub });

这意味着您的 fetchData() 函数需要有这样的实现:

function(args) {
   // ....
   args.firstStub(params);
   args.secondStub(params);
   // ...
};

我严重怀疑您的生产代码是否将这些回调称为“存根”。所以你可能想像这样调用函数:

AccountApp.fetchData(firstStub, secondStub);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2011-05-11
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多