如何根据发送的实际参数 return?

How to return based on actual arguments being sent?

假设我们有一个带有两个参数的函数。它被多次调用,每次调用都有不同的参数。因此,不可能使用 withArgs 选项对其进行存根。

async function foo(args1, args2){
    // some business logic
    return result
}

我想编写一个存根函数,它将检查 实际参数 被传递(args1,args2)和 return 带有 switch case 的静态响应。以下几行内容:

sinon.stub(TestModule, "foo")
    .resolves(asyn function(args1, args2){
         switch(args2){
           case "a":
               return 1
           case "b":
               return 2
           case "c":
               return 3
           default: 
               return 0 
         }
         
     })

那么,如何return实事求是呢?

您可以使用 stub(obj, 'meth').callsFake(fn) 动态检查传入的内容并对其作出响应。

例如:

const mockFunction = (arg1, arg2) => { switch(arg2) {case "a": return 1 ...}}
sinon.stub(TestModule, "foo").callsFake(mockFunction);

请注意,对于早期版本的 Sinon < 3.0.0 您应该改用 var stub = sinon.stub(object, "method", fn);