问题描述
class Api {
constructor(stuff) {
...set stuff
}
doSomething() {
...doesSomething
}
}
class UtilApi extends Api {
constructor(stuff) {
super(stuff);
}
getThings = async() => {
this.doSomething();
return things;
}
}
我习惯于使用语法在 sinon 中存根
sinon.stub(SomeClass.prototype,'someMethod').resolves({});
但是,当我尝试这样做时:
sinon.stub(UtilApi.prototype,'getThings').resolves({});
我收到错误消息:
TypeError: Cannot stub non-existent property getThings
在我的测试套件中查看 UtilApi.prototype
时 - 我注意到它只是父 Api
。所以我可以存根父类中的方法 doSomething
,但我不能存根子类中的任何方法。
我尝试过 callsFake
、Ovject.setPrototypeOf
和 sinon.createStubInstance
- 但都不起作用。
如何存根 UtilApi
以伪造方法 getThings()
的返回?
更新
感谢评论者 - 我再次查看了我的代码并将 getThings
从箭头函数更改为常规函数。
getThings = async() => {
this.doSomething();
return things;
}
async getThings() {
this.doSomething();
return things;
}
这解决了问题并正确存根 - 当我知道为什么它不适用于箭头函数时会更新。
更新 2
问题在这里回答https://github.com/sinonjs/sinon/issues/1136
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)