测试中的 NestJS 全局模块

Posted

技术标签:

【中文标题】测试中的 NestJS 全局模块【英文标题】:NestJS Global Modules in tests 【发布时间】:2019-08-06 01:44:58 【问题描述】:

有没有办法自动将所有 @Globalmodules 提供到 TestModule 中? (即无需导入它们,与主应用程序的工作方式相同)

到目前为止,我必须确保将所有全局模块插入到我的调用的import 列表中:

await Test.createTestingModule(
      imports: [
        GlobalModule1,
        GlobalModule2

【问题讨论】:

【参考方案1】:

全局模块总是必须导入一次,它们的提供程序才能在全球范围内可用。这适用于测试主应用程序,请参阅docs。

全局模块只能注册一次,最好由 根或核心模块。之后,CatsService 提供者将是 无处不在,虽然CatsModule 不会被导入。

所以没有办法导入它们。您可以通过创建一个导入所有全局模块的CommonsModule 来简化它。然后,您可以导入 CommonsModule 而不是 AppModule 和您的测试中的每个模块。

但请注意,拥有大量全局依赖项是一种代码异味。此外,在单元测试中,您通常希望独立于任何其他依赖项来测试一个类。如果您导入全局模块,您将针对实际的提供者进行测试。

让一切都全球化并不是一个好的决定。全局模块 可用于减少必要的样板数量。这 导入数组仍然是制作模块 API 的最佳方式 透明的。

【讨论】:

以上是关于测试中的 NestJS 全局模块的主要内容,如果未能解决你的问题,请参考以下文章

NestJS - 测试套件无法运行从“comment/comment.entity.ts”中找不到模块“src/article/article.entity”

NestJS:每个模块导入的 HttpModule 新实例

使用 NestJS 测试猫鼬模型

如何在 NestJS 中跨模块全局注入价值?

如何用 jest 在服务 (NestJS) 中测试模型 (Mongoose)

运行nestjs应用程序时typeorm迁移中的“不能在模块外使用import语句”