【问题标题】:Sinon stub argument return fake callbackSinon 存根参数返回假回调
【发布时间】:2018-10-10 16:42:15
【问题描述】:

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

这基本上是我想要实现的,我在诗农的文档上一无所获:

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']

有可能吗?

【问题讨论】:

  • 你到底想测试什么?
  • 这有关系吗?我需要所有参数都相同,除了那个。它是被调用函数链的简化版本。
  • 为什么不只是模拟 function B 来返回模拟值。
  • 因为是回调函数,所以不是固定函数。我需要嘲笑那个论点..
  • 我不确定是否有任何方法可以做你想做的事。请解释一下场景,我可以帮忙吗?在您的示例中,您没有使用 function B 作为回调。这是一个返回值的简单函数。

标签: sinon


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2018-08-19
    • 2018-03-29
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多