我创建了一个 Nestjs 服务器并使用 .env 文件加载配置
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`../.env.${process.env.NODE_ENV}`, '../.env'],
}),
我有 e2e 测试用例,需要在ConfigService
是否有任何选项可以更改键的值?
我创建了一个 Nestjs 服务器并使用 .env 文件加载配置
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [`../.env.${process.env.NODE_ENV}`, '../.env'],
}),
我有 e2e 测试用例,需要在ConfigService
是否有任何选项可以更改键的值?
致谢:米卡尔·列维
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];
}
});
如果模拟是一个令人头疼的问题,您总是可以选择“hacky”解决方案并手动修改服务对象的内部结构。
例子:
config.get('someKey'); // 'original'
config.internalConfig['someKey'] = 'mockValue'; // the hacky act
config.get('someKey'); // 'mockValue'
然后您可以使用相同的对象并使用beforeEach
和afterEach
/或您认为适合您的测试对其进行修改