Sinon存根参数返回假回调

时间:2018-10-10 16:42:16

标签: sinon

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

这基本上是我想要实现的目标,而在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']

有可能吗?

1 个答案:

答案 0 :(得分:1)

是的,有可能。

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