繁体   English   中英

测试中的 NestJS 全局模块

[英]NestJS Global Modules in tests

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

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

await Test.createTestingModule({
      imports: [
        GlobalModule1,
        GlobalModule2

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

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

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

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

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

我在全局ConfigModule<\/code>的单元测试中遇到了类似的问题。 有人可能会觉得它很有用,所以我将在下面解释它。

作为最小配置,我的根模块具有这些值

// app.module.ts
@Module({
  imports: [
    RedisModule,
    ConfigModule.forRoot({
      isGlobal: true,
      cache: true,
      validationSchema: Joi.object({
        REDIS_HOST: Joi.string().required(),
        REDIS_PORT: Joi.number().required(),
        REDIS_USER: Joi.string().optional(),
        REDIS_PASS: Joi.string().optional(),
      }),
      validationOptions: {
        abortEarly: false,
        allowUnknown: true,
      },
    }),
  ],
})
export class AppModule {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM