首页 > 解决方案 > Sinon:如何根据发送的实际参数返回?

问题描述

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

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

我想编写一个存根函数,它将检查传递的实际参数(args1,args2)并返回带有 switch 案例的静态响应。以下几行:

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 
         }

     })

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

标签: javascriptunit-testingmockingsinonstub

解决方案


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


推荐阅读