0

我创建了一个 Nestjs 服务器并使用 .env 文件加载配置

  ConfigModule.forRoot({
    isGlobal: true,
    envFilePath: [`../.env.${process.env.NODE_ENV}`, '../.env'],
  }),

我有 e2e 测试用例,需要在ConfigService 是否有任何选项可以更改键的值?

4

2 回答 2

0

致谢:米卡尔·列维

import { createMock, DeepMocked } from '@golevelup/ts-jest';

let mockConfigService: DeepMocked<ConfigService>
let app: INestApplication;

// Before Each
 const moduleRef = await Test.createTestingModule({
    providers: [
      {
        provide: ConfigService,
        useValue: createMock<ConfigService>(),
      },
    ],
  }).compile();

  app = moduleRef.createNestApplication();

  // Other configs

  await app.init();

  mockConfigService = moduleRef.get(ConfigService)

// it(...)
  jest.spyOn(mockConfigService, 'get').mockImplementation((key: string) => {
    if (key === 'KEY_To_BE_MOCKED') {
      return 'true';
    } else {
      return process.env[key];
    }
  });

于 2022-01-22T09:21:05.370 回答
0

如果模拟是一个令人头疼的问题,您总是可以选择“hacky”解决方案并手动修改服务对象的内部结构。

例子:

config.get('someKey'); // 'original'
config.internalConfig['someKey'] = 'mockValue'; // the hacky act
config.get('someKey'); // 'mockValue'

然后您可以使用相同的对象并使用beforeEachafterEach/或您认为适合您的测试对其进行修改

于 2022-01-27T16:57:09.903 回答