Гнездо js не может разрешить зависимость - PullRequest
0 голосов
/ 16 января 2020

Проблема:

Я получаю проблему ниже при выполнении контрольного примера

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;
  }
}

...