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();
在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();