Typescript 巢罐';t解析测试字符串的依赖关系

Typescript 巢罐';t解析测试字符串的依赖关系,typescript,dependency-injection,nestjs,Typescript,Dependency Injection,Nestjs,问题: 在执行单元测试用例时获得以下问题 嵌套无法解析testString(?)的依赖项。请确保索引[0]处的参数SECRET\u MANAGER\u服务在SecretManagerServiceModule上下文中可用 错误日志: SecretsManagerServiceModule›#forFeature()›应具有纯字符串secret(无id) 代码: Github链接: 我试图遵循与nestjs/mongoose()相同的结构 但这对我不起作用。有人知道这个代码有什么问题吗

问题:
在执行单元测试用例时获得以下问题

嵌套无法解析testString(?)的依赖项。请确保索引[0]处的参数SECRET\u MANAGER\u服务在SecretManagerServiceModule上下文中可用


错误日志:
SecretsManagerServiceModule›#forFeature()›应具有纯字符串secret(无id)


代码:

Github链接:


我试图遵循与nestjs/mongoose()相同的结构 但这对我不起作用。有人知道这个代码有什么问题吗

如何使用:


app.module.ts:这将初始化SecretsManager


sample.module.ts:一旦机密管理器初始化,我们就可以使用forFeature函数向任何提供者注入机密


sample.service.ts

@Injectable()
class SampleService {
  constructor(@Inject('testString') testStr: string) {}
}

编辑2020年6月1日 在查看了代码和我们对discord(jmcdo29)的简要讨论之后,解决方案是标记
SecretManagerServiceModule
@Global()
,这样在运行
SecretManagerServiceModule.forRoot()
之后,当您运行
SecretManagerServiceModule.forFeature()时,提供程序仍然可用

您可能需要研究如何创建一个类似NestJS对Mongoose和TypeORM所做的
核心
模块,以使部分代码更清晰/更易于理解。很高兴您能够找到解决方案:)


从您提供的代码中可以看出,您正在尝试注入与注入令牌相关的值
testString
。由于我看不到您在模块中提供了什么令牌,我只能说,您需要确保您的
forRoot
forFeature
中有一些令牌,您需要在
提供者中按以下方式排列:

{
  provide: 'testString',
  useValue: theValueYouWantToInject
}
如果您需要更多帮助,则需要查看更多代码。具体来说,您的
SecretsManagerModule
forRoot
forFeature
方法是如何工作的,以及您作为注入令牌提供了什么

Edit 01/06/2020 在查看了代码和我们对discord(jmcdo29)的简要讨论之后,解决方案是标记
SecretManagerServiceModule
@Global()
,这样在运行
SecretManagerServiceModule.forRoot()
之后,当您运行
SecretManagerServiceModule.forFeature()时,提供程序仍然可用

您可能需要研究如何创建一个类似NestJS对Mongoose和TypeORM所做的
核心
模块,以使部分代码更清晰/更易于理解。很高兴您能够找到解决方案:)


从您提供的代码中可以看出,您正在尝试注入与注入令牌相关的值
testString
。由于我看不到您在模块中提供了什么令牌,我只能说,您需要确保您的
forRoot
forFeature
中有一些令牌,您需要在
提供者中按以下方式排列:

{
  provide: 'testString',
  useValue: theValueYouWantToInject
}

如果您需要更多帮助,则需要查看更多代码。具体地说,您的
SecretsManagerModule
forRoot
forFeature
方法是如何工作的,以及您作为注入令牌提供了什么

您能否展示您的
forRoot
forFeature
函数的功能?以及任何正在注入提供商以供使用的服务?我已经更新了关于如何使用该服务的描述。我已经找到了解决方案。我忘了将模块标记为全局,这就是它不工作的原因。但是现在一切正常
configuration
在sample.module.t中拼写错误。您能展示
forRoot
forFeature
函数的功能吗?以及任何正在注入提供商以供使用的服务?我已经更新了关于如何使用该服务的描述。我已经找到了解决方案。我忘了将模块标记为全局,这就是它不工作的原因。但是现在,在创建提供程序{provide:'SECRET\u MANAGER\u SERVICE',useValue:new AWS.SecretsManager()}的sample.module.tsforRoot函数中,configuration
拼写错误,而forFeature函数用于创建提供程序测试字符串。但要创建这个提供者,我需要注入“SECRET\u MANAGER\u SERVICE”提供者。请检查这个。但nestjs不知何故无法注入SECRET\u MANAGER\u SERVICEforRoot函数来创建提供程序{provide:'SECRET\u MANAGER\u SERVICE',useValue:new AWS.SecretsManager()},而forFeature函数用于创建提供程序测试字符串。但要创建这个提供者,我需要注入“SECRET\u MANAGER\u SERVICE”提供者。请检查这个。但nestjs不知何故无法注入秘密管理服务
@Module({
  imports: [
    SecretManagerServiceModule.forFeature({
      confiiguration: [{ secretName: 'testString', secretType: 'plain' }],
    }),
  ],
  providers: [SampleService],
})
class SampleModule {}
@Injectable()
class SampleService {
  constructor(@Inject('testString') testStr: string) {}
}
{
  provide: 'testString',
  useValue: theValueYouWantToInject
}