Sinon:如何根据发送的实际参数返回?

时间:2018-12-15 08:27:05

标签: javascript unit-testing mocking sinon stub

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

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

我想编写一个存根函数,该函数将检查正在传递的 实际参数 (args1,args2),并返回带有开关大小写的静态响应。以下几行内容:

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 
         }

     })

那么,如何根据实际参数返回?

1 个答案:

答案 0 :(得分:0)

您可以使用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);

如果您认为有用,请接受我的回答。 :D