Sinon 存根参数 return 假回调

Sinon stub argument return fake callback

我只想知道是否可以在存根参数上伪造回调。

这基本上就是我想要实现的,我在 Sinon 的文档中没有找到:

function A(arg1, arg2, next){

    return [arg1, arg2, next];
};

function B(string){
    return string;
};

function C(){
    return 'Mocked next';
};

var obj = {
    A: A,
    test: 'test'
};

var result1 = obj.A(1, 2, B('Next')); // result1 = [1, 2, 'Next']

sandbox.stub(obj, 'A')//.Argument[2].Returns(C());

var result2 = obj.A(1, 2, B('Next')); // result2 = [1, 2, 'Mocked next']

可能吗?

是的,有可能。

sinon 不提供直接模拟 stub 参数的方法,但它确实提供了 callsFake 让您创建自己的实现。

您可以创建一个 stub 调用原始实现,结果 C() 作为第三个参数传递,如下所示:

const original = obj.A;  // capture original obj.A
sandbox.stub(obj, 'A').callsFake((...args) => original(args[0], args[1], C()));

const result = obj.A(1, 2, B('Next'));
sinon.assert.match(result, [1, 2, 'Mocked next']);  // SUCCESS