Sinon:从子对象调用一个方法,但仅从祖父 class 监视方法

Sinon: calling a method from the child object but spying the one from the grand parent class only

在javascript

class GrandParent {
  myfunc() {
    console.log('Parent myfunc');
  }
}


class Parent extends GrandParent {
  myfunc() {
    // do something else here
    for (let i = 0; i < 3; i++) {
      super.myfunc()
    }
  }
}

class Child extends Parent {
  mymeth() {
    // do something here
      this.myfunc();
    }
}

let spy = sinon.spy(Child.<?>, "myfunc")

let child = new Child();
child.myfunc();

console.log(spy.callCounts); --> 3 expected

我只能访问 Child class(通过仅导出此 class 的要求,不得更改)并且我想从 GrandParent class 为了最终得到 spy.callCounts === 3.

有可能吗?怎么做?

提前致谢

您需要在 GrandParent.prototype 上存根。

另外,为了安全起见,最好安装spies/stubs,然后创建对象:

如果无法通过导入访问,您可以使用反射(在本例中为“两次”:

const parentConstructor = Reflect.getPrototypeOf(Child)
const grandpaConstructor = Reflect.getPrototypeOf(parentConstructor);

let spy = sinon.spy(grandpaConstructor.prototype, "myfunc")
let child = new Child();
child.myfunc();