如何在单元测试时向 nestjs 中的服务提供注入常量



我尝试为我的小应用程序创建单元测试。我想测试使用注入配置和其他服务的服务。

@Injectable()
export class AuthService {
private readonly localUri: string;
constructor(
@Inject(CORE_CONFIG_TOKEN) private readonly coreConfig: ICoreConfig,
@Inject(PROVIDER_CONFIG_TOKEN) private readonly providerConfig: IProviderConfig,
private readonly _httpService: HttpService,
private readonly _usersService: UsersService,
) {
this.localUri = `http://${this.coreConfig.domain}:${this.coreConfig.port}`;
}
...

/**
* Checks if a given email is already taken
* @param email
*/
async isEmailTaken(email: string): Promise<boolean> {
return (await this._usersService.findUserByEmail(email)) !== undefined;
}
...

我不明白如何测试这项服务。我不知道如何为注入的配置提供正确的测试模块提供程序@Inject(CORE_CONFIG_TOKEN) private readonly coreConfig: ICoreConfig

const testCoreConfig = '{...}'
const module = await Test.createTestingModule({
providers: [AuthService, {
provide: 'CORE_CONFIG_TOKEN',
useClass: testCoreConfig ,
}],
}).compile();

我也不确定我是否还需要创建其他导入的服务。我只是想检查他们是否被召唤。如果是这样,则返回模拟数据。我可以这样做,但我坚持模块设置。

到目前为止,我找到的所有示例都只有一个存储库的服务。并或多或少地检查服务是否存在。但是没有检查实现的逻辑和类之间的连接。

我希望我的问题很清楚 谢谢

我认为如果您传递键值的对象,您应该使用useValue属性而不是useClass

providers: [
{
provide: CORE_CONFIG_TOKEN,
useValue: {
domain: 'nestjs.com',
port: 80,
},
},
],

还有一些关于在 nestjs 上为模块创建配置提供程序/服务的文档。

我还创建了一个 nestjs-config 模块,您可以使用与此类似的模块。

@Injectable()
class TestProvider {
constructor(private readonly @InjectConfig() config) {
this.localUri = config.get('local.uri');
}
@Module({
imports: [ConfigModule.load('path/to/config/file/*.ts')],
providers: [TestProvider],
})
export AppModule {}
//config file 'config/local.ts'
export default {
uri: `https://${process.env.DOMAIN}:/${process.env.PORT}`,
}

最新更新