在 JestJS 中测试私有方法

dic*_*ate 10 unit-testing private-members typescript jestjs nestjs

我正在使用 NestJS(使用 TypeScript)制作一个 API,它使用 JestJS 作为默认测试框架。我正在为服务类编写测试,并尝试访问其私有函数(使用 TypeScript 强制执行),但出于明显的原因我无法访问。

其他语言(如 Java)中的传统解决方案是将函数更改为包内内部作用域,但这在 TypeScript 中不存在。

如何出于测试目的访问这些函数,但仍强制执行私有访问(作为良好实践)?

ada*_*fsk 9

作为指导,您应该能够使用类的公共方法来测试该类。如果私有/受保护的访问中隐藏着重要的功能,那么这可能是一个信号,表明它可以被重构到另一个类中。

\n\n

您是否可以将复杂的私有方法重构为另一个类,然后可以单独测试?

\n\n

请记住,测试私有方法将使您的测试更容易受到实现类行为方式的变化的影响,即使类本身的行为没有改变。例如,在进行优化重构时很可能会出现这种情况。

\n\n

编辑:\n鉴于您\xe2\x80\x99在基础级别使用JavaScript,\xe2\x80\x99有多种方法可以实现您的目标,例如您\xe2\x80\x99发布的解决方案protected 并使用子类进行测试,或者通过使方法公开、临时或永久的某种变体,但以任何形式这样做几乎肯定是不明智的。我强烈建议阅读以下链接,它提供了有关为什么这样做\xe2\x80\x99 是一个坏主意的更多信息,并且还为您\xe2\x80\x99 遇到的问题提供了潜在的良好解决方案:\n https:/ /enterprisecraftsmanship.com/2017/10/23/unit-testing-private-methods/

\n

  • 我不确定这个问题是否有非固定答案,但我不同意这个答案应该是评论(它旨在回答问题,而不是进一步推进问题) (4认同)