如何使用 sinon 存根子类

问题描述

我有两个类,一个父类一个子类。

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,但我不能存根子类中的任何方法

我尝试过 callsFakeOvject.setPrototypeOfsinon.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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...