Проблема:
Я получаю проблему ниже при выполнении контрольного примера
Nest не может разрешить зависимости AWSSecretManagerStringConfigTest (?). Убедитесь, что аргумент testString с индексом [0] доступен в контексте _RootTestModule.
Я использую все последние версии пакетов nest js
Ошибка Журналы:
AWSModule (служба SecretsManager) ›Должен иметь простой строковый секрет
all-test |
all-test | Nest can't resolve dependencies of the AWSSecretManagerStringConfigTest (?). Please make sure that the argument testString at index [0] is available in the _RootTestModule context.
all-test |
all-test | Potential solutions:
all-test | - If testString is a provider, is it part of the current _RootTestModule?
all-test | - If testString is exported from a separate @Module, is that module imported within _RootTestModule?
all-test | @Module({
all-test | imports: [ /* the Module containing testString */ ]
all-test | })
all-test |
all-test | at Injector.lookupComponentInParentModules (node_modules/@nestjs/core/injector/injector.js:190:19)
all-test | at Injector.resolveComponentInstance (node_modules/@nestjs/core/injector/injector.js:146:33)
all-test | at resolveParam (node_modules/@nestjs/core/injector/injector.js:100:38)
all-test | at async Promise.all (index 0)
all-test | at Injector.resolveConstructorParams (node_modules/@nestjs/core/injector/injector.js:115:27)
all-test | at Injector.loadInstance (node_modules/@nestjs/core/injector/injector.js:79:9)
all-test | at Injector.loadProvider (node_modules/@nestjs/core/injector/injector.js:36:9)
all-test | at async Promise.all (index 3)
all-test | at InstanceLoader.createInstancesOfProviders (node_modules/@nestjs/core/injector/instance-loader.js:41:9)
all-test | at node_modules/@nestjs/core/injector/instance-loader.js:27:13
Код:
GITHUB LINK: https://github.com/bhushan629/aws
Тестовые примеры:
ЭТО ТЕСТ Случай работает правильно для меня
test('Shold have plain string secret', async () => {
const response: AWS.SecretsManager.GetSecretValueResponse = {
SecretString: 'hello',
};
AWSMock.setSDKInstance(AWS);
AWSMock.mock('SecretsManager', 'getSecretValue', Promise.resolve(response));
const module: TestingModule = await Test.createTestingModule({
imports: [
AWSModule.forServices([{ serviceName: 'secrets-manager' }]),
AWSModule.forServicesFeature([
{ serviceName: 'secrets-manager', confiiguration: [{ secretName: 'testString', secretType: 'plain' }] },
]),
],
}).compile();
const plainString = module.get('testString');
expect(plainString).toEqual('hello');
AWSMock.restore();
});
, но когда я пытался выполнить приведенный ниже тестовый пример, он выдает мне ошибку
test('Should have plain string secret', async () => {
const response: AWS.SecretsManager.GetSecretValueResponse = {
SecretString: 'hello',
};
AWSMock.setSDKInstance(AWS);
AWSMock.mock('SecretsManager', 'getSecretValue', Promise.resolve(response));
const module: TestingModule = await Test.createTestingModule({
imports: [
AWSModule.forServices([{ serviceName: 'secrets-manager' }]),
AWSModule.forServicesFeature([
{ serviceName: 'secrets-manager', confiiguration: [{ secretName: 'testString', secretType: 'plain' }] },
]),
],
providers: [AWSSecretManagerStringConfigTest],
}).compile();
const awsSecretManagerStringConfigTest = module.get(AWSSecretManagerStringConfigTest);
expect(awsSecretManagerStringConfigTest).toBeInstanceOf(AWSSecretManagerStringConfigTest);
expect(awsSecretManagerStringConfigTest.getSecret()).toEqual('hello');
AWSMock.restore();
});
AWSSecretManagerStringConfigTest.ts
import { Injectable, Inject } from '@nestjs/common';
@Injectable()
export class AWSSecretManagerStringConfigTest {
constructor(@Inject('testString') private readonly secret: string) {}
getSecret(): string {
return this.secret;
}
}