只为一个参数存根函数

时间:2015-07-22 22:35:29

标签: javascript node.js mocking sinon

所以基本上我有一个函数,只有当参数等于某个东西时我才想要存根。 实施例

var sinon = require('sinon');

var foo = {
    bar: function(arg1){
        return true;
    }
};

var barStub = sinon.stub(foo, "bar");
barStub.withArgs("test").returns("Hi");

// Expectations
console.log(foo.bar("test")); //works great as it logs "Hi"

// my expectation is to call the original function in all cases except 
// when the arg is "test"
console.log(foo.bar("woo")); //doesnt work as it logs undefined

我正在使用此程序包https://www.npmjs.com/package/sinon

2 个答案:

答案 0 :(得分:1)

环顾四周:

https://github.com/cjohansen/Sinon.JS/issues/735 https://groups.google.com/forum/#!topic/sinonjs/ZM7vw5aYeSM

根据第二个链接,克里斯蒂安写道:

  

不可能,也不应该是必要的。你的选择   是:

     
      
  1. 简化您的测试,不能一次性涵盖这么多用途
  2.   
  3. 根据withArgs,return / yield等表达所需的行为
  4.   
  5. 使用sinon.stub(obj, meth, fn)提供自定义功能
  6.   

我倾向于尝试选项3 - 看看你是否可以让它工作(遗憾的是,文档非常轻松)。

答案 1 :(得分:0)

我有同样的问题。接受的答案已过时。

stub.callThrough();将达到此目的。

只需在barStub.callThrough()之后致电barStub.withArgs("test").returns("Hi")

https://sinonjs.org/releases/v7.5.0/stubs/