【问题标题】:Understanding Sinon Spies: What happens when a spy-wrapped method is called?了解 Sinon Spies:调用 spy-wrapped 方法时会发生什么?
【发布时间】:2018-07-29 09:59:23
【问题描述】:

当我将一个类的方法包装成这样的 Sinon-spy 时:

sinon.spy(myObject, "myMethod")

间谍内部发生了什么?

我猜这个间谍对象有一个指向“myObject.myMethod”的引用。

当方法变为调用时会发生什么?

我知道间谍会记录有关调用的信息,例如调用次数、使用的参数等。

但是 myMethod 真的会被调用吗?

我的意思是:进一步将调用传递给间谍对象? 间谍对象是否充当代理?还是只记录信息?

【问题讨论】:

    标签: javascript unit-testing sinon


    【解决方案1】:

    从一个简单的测试看来,sinon spy 确实调用了原始方法:

    it('does a thing', function() {
        const el = {};
        el.thing = function() { console.log('thing'); }
        sinon.spy(el, 'thing');
        el.thing();
        console.log(el.thing.called);
    });
    
    // prints:
    // thing
    // true
    

    the docs看来也是这样:

    sinon.spy(object, "method") 创建一个封装现有函数 object.method 的 spy。 间谍的行为与原始方法完全相同(包括用作构造函数时),但您将可以访问有关所有调用的数据。

    【讨论】:

    • 太棒了。所以它确实像一个代理。为什么我自己没有这个简单的想法。 :)) 无论如何:非常感谢。
    猜你喜欢
    • 2014-11-20
    • 2017-01-07
    • 2019-09-11
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多