如何在Jest中测试类的私有方法

roejwanj  于 2022-12-08  发布在  Jest
关注(0)|答案(1)|浏览(270)

我正在使用react typescript 。
所以我在我的项目中有一个类似的类设置。Foo有两个成员方法a and bb是一个私有方法。有一个类Buzz负责数据获取,并在完成时调用传递给它的私有方法。

class Buzz {
  callLater({ onMsg }) {
    setTimeout(() => {
      onMsg('Buzz completed')
    }, 2000)
  }
}

class Foo {
  a() {
    console.log('calling a');
    const buzz = new Buzz()
    buzz.callLater({onMsg: this.b})
  }

  private b(msg) {
    console.log('calling b');
    console.log(msg)
  }

}

我想测试typescript中的私有method b,我正在做类似下面的事情。但是当测试运行程序运行(jest)时,它失败了,并说fooInstance.b不是一个函数

const foo = new Foo();
const fooInstance = (Foo.prototype as unknown) as { b: () => void };

fooInstance.b()

不明白我如何才能测试它。卡住了几个小时。

rfbsl7qr

rfbsl7qr1#

有一个类Buzz负责数据获取,并在完成时调用传递给它的私有方法。
那么Buzz的职责是什么呢?它的职责是调用传递给它的参数。你不关心参数是什么,只关心buzz示例需要在适当的时候调用它。
foo.a的职责是什么?它的职责是创建一个buzz,调用它的callLater方法,console.log是buzz的消息。你不在乎它是通过调用foo.b完成的,同样的结果可以通过这样写代码来实现:

class Foo {
  a() {
    console.log('calling a');
    const buzz = new Buzz()
    buzz.callLater({onMsg: console.log})
  }

}
    • 不要测试你的实现细节,测试你的行为。**(就像jonsharpe说的)

相关问题