如何获取 sinon 中存根的参数并使用参数之一 + 其他数据作为特定存根调用的返回值

Geo*_*lov 2 testing mocking node.js sinon chai

我想要实现的是存根一个将返回某个值的调用。该返回值由传递的参数之一和一个新值组成。

如何获取存根的参数并使用它来形成给定存根调用的返回值

例如

mockDb.query.onCall(0).return(
   Tuple(this.args(0), "Some other data");
);
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

sinon.stub(obj, "hello", function (a) {
    return a;
});
Run Code Online (Sandbox Code Playgroud)

但是,这适用于整个存根而不是单个存根调用。不幸的是,我无法为不同的调用提供不同的存根,因为我只有一个对象(db 存根)。

bar*_*ski 6

要在第一次调用存根时访问函数参数,您可以使用:

sinon.stub(obj, "method").onCall(0).callsFake( function(arg) {
    return "data" + arg;
});
Run Code Online (Sandbox Code Playgroud)

这将首先调用存根以返回与传递的参数连接的“数据”。

我已经使用 node v7.10 和 sinon v4 对其进行了测试。在整个测试脚本下面:

const sinon = require('sinon');
let obj = {
    test: (arg1, arg2) => {
        return arg1 + arg2;
    }
}

let stub = sinon.stub(obj, "test");
stub.onCall(0).callsFake((arg1, arg2) => {
    return "STB" + arg1 + arg2;
})


console.log(stub("lol", "lol2")); // -> STBlollol2
console.log(stub("lol", "lol3")); // -> undefined
Run Code Online (Sandbox Code Playgroud)