Аргумент заглушки Sinon возвращает поддельный обратный вызов - PullRequest
0 голосов
/ 10 октября 2018

Я просто хочу знать, возможно ли подделать обратный вызов для аргумента заглушки.

Это в основном то, чего я хочу достичь, и я ничего не нашел в документации Синона:

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 голосов
/ 11 октября 2018

Да, это возможно.

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
...