代码之家  ›  专栏  ›  技术社区  ›  cluster1

了解Sinon Spies:当调用间谍包装方法时会发生什么?

  •  0
  • cluster1  · 技术社区  · 7 年前

    当我把一个类的方法包装成这样一个Sinon间谍时:

    sinon.spy(myObject, "myMethod")
    

    间谍内部发生了什么?

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

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

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

    但是我的方法 真正地 被调用?

    我的意思是:把间谍对象的召唤传得更远? 间谍对象是代理吗? 还是只记录信息?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Yury Fedorov    7 年前

    从一个简单的测试来看,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 :

    Simon。间谍(对象,“方法”)创建一个覆盖现有函数对象方法的间谍。 间谍的行为和原来的方法一模一样 (包括用作构造函数时),但您将可以访问有关所有调用的数据。