【问题标题】:Is there a way to stub method using sinon where method has two arguments有没有办法使用 sinon 存根方法,其中方法有两个参数
【发布时间】:2019-03-18 06:09:33
【问题描述】:

让我解释一下问题陈述:

我正在使用 Mocha、Chai 和 Sinon。我正在尝试存根如下所示的方法:

myNamespace.myMethod({
  beforeSend() { ... }
}, callback)

我想存根myMethod 并调用beforeSend 以及callback。我无法找到有效的解决方案。我尝试了以下方法,但它不起作用:

sinon.stub(myNamespace, 'myMethod').yieldsTo('beforeSend', {}).callsArg(1);

我做错了什么?

【问题讨论】:

    标签: javascript unit-testing mocha.js sinon chai


    【解决方案1】:

    不可能像这样链接两个不同的行为同一个函数调用所以.callsArg(1)最终会覆盖.yieldsTo('beforeSend', {})

    对于这样的事情,您需要使用callsFake 提供一个虚假的实现:

    const sinon = require('sinon');
    
    const myNamespace = {
      myMethod: (obj, callback) => { }
    }
    
    it('myMethod', () => {
      const beforeSendArg = { };
    
      sinon.stub(myNamespace, 'myMethod').callsFake((obj, callback) => {
        obj.beforeSend(beforeSendArg);
        callback();
      });
    
      const beforeSend = sinon.spy();
      const callback = sinon.spy();
    
      myNamespace.myMethod({ beforeSend }, callback);
    
      sinon.assert.calledWithExactly(beforeSend, beforeSendArg);  // Success!
      sinon.assert.called(callback);  // Success!
    });
    

    【讨论】:

    • 我试试看!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 2016-09-21
    • 2014-08-16
    • 2012-03-01
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多