首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试Jest中类的私有方法

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

Stack Overflow用户
提问于 2022-11-08 13:13:46
回答 1查看 29关注 0票数 -1

我用的是反应打字本。

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

代码语言:javascript
复制
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)
  }

}

我想在打字稿中测试私有的method b,我正在做下面这样的事情。但是,当测试运行程序运行(jest)时,它会失败,并表示fooInstance.b不是一个函数。

代码语言:javascript
复制
const foo = new Foo();
const fooInstance = (Foo.prototype as unknown) as { b: () => void };

fooInstance.b()

不明白我将如何测试它。被困了几个小时。

EN

回答 1

Stack Overflow用户

发布于 2022-11-08 13:30:31

有一个类Buzz,它负责数据获取,并在完成时调用传递给它的私有方法。

那么Buzz的职责是什么呢?它的责任是调用传递给它的论点。您不关心论点是什么,只是嗡嗡声实例需要在适当的时候调用它。

foo.a的职责是什么?这是为了创造一种热议,称它是callLater方法,console.log是来自buzz的消息。您不关心它是通过调用foo.b来完成的,通过这样编写代码可以获得相同的结果:

代码语言:javascript
复制
class Foo {
  a() {
    console.log('calling a');
    const buzz = new Buzz()
    buzz.callLater({onMsg: console.log})
  }

}

不测试您的实现细节,测试您的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74361344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档