【发布时间】:2021-07-17 12:14:31
【问题描述】:
我正在尝试掌握如何使用 Nestjs 进行良好的测试。
因此,我正在阅读文档 [https://docs.nestjs.com/fundamentals/testing#testing-utilities],但有一段我不完全理解的摘录:
Test 类可用于提供实质上模拟完整 Nest 运行时的应用程序执行上下文,但为您提供钩子,使您可以轻松管理类实例,包括模拟和覆盖。
在这种情况下什么是钩子?
【问题讨论】:
我正在尝试掌握如何使用 Nestjs 进行良好的测试。
因此,我正在阅读文档 [https://docs.nestjs.com/fundamentals/testing#testing-utilities],但有一段我不完全理解的摘录:
Test 类可用于提供实质上模拟完整 Nest 运行时的应用程序执行上下文,但为您提供钩子,使您可以轻松管理类实例,包括模拟和覆盖。
在这种情况下什么是钩子?
【问题讨论】:
在这种情况下,有两个主要的钩子被普遍引用:
Test.createTestingModule().compile() 命令。这使我们能够以最小的努力设置一个测试模块,这样我们就可以只传递我们想要测试的类所需的元数据。无需将模块添加到imports,我们可以将服务与自定义提供程序一起传递给providers,以模拟该服务的依赖关系。这使得单元测试更容易(在我看来)。这也使得不必致电new MyService(new MockDep1(), new MockDep2(), ...new MockDepN()) 成为可能,Nest 仍会像它一直在做的那样为我们管理它。
TestingModule 也有一些有用的可链接方法,例如 overridePrivoder、overrideGuard、overrideInterceptor、overridePipe 和 overrideFilter。这些允许我们覆盖已经在模块上下文中设置的提供程序和增强器(例如,如果我们使用导入进行 e2e 测试)
【讨论】: