测试中的 NestJS 全局模块
Posted
技术标签:
【中文标题】测试中的 NestJS 全局模块【英文标题】:NestJS Global Modules in tests 【发布时间】:2019-08-06 01:44:58 【问题描述】:有没有办法自动将所有 @Global
modules 提供到 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”