我只想知道是否可以伪造存根参数上的回调。
这基本上是我想要实现的目标,而在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']
有可能吗?
答案 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