gpt4 book ai didi

javascript - 如何使用Nest.js在开发中提供MockService?

转载 作者:行者123 更新时间:2023-12-02 23:54:31 31 4
gpt4 key购买 nike

我有一个类 MailService 和一个类 MailMockService,应该在开发中使用。

根据Nest documentation ,它应该像这样工作:

app.module.ts

@Module({
imports: [...],
controllers: [...],
providers: [
...,
{
provide: MailService,
useClass: (process.env.NODE_ENV === 'development') ? MailMockService : MailService,
},
],
})
export class AppModule {
}

但是,它并没有按预期工作。 process.env.NODE_ENV 等于 'development',但模块仍然提供类 MailService

如何让模块根据环境提供MailMockService

编辑:

我这样使用该服务:

import { MailService } from './mail/mail.service';
...
const mailService = new MailService();

我认为,导入绕过了Module提供的MailService/MailMockService(代码仍然有效)没有 providers 数组中的对象)。但我怎样才能告诉程序使用 MailMockService 呢?

最佳答案

如果您自己创建服务实例而不是使用 Nest 的依赖注入(inject),那么您就违背了框架的目的。

But how can I tell the program to use the MailMockService?

这正是依赖注入(inject)如此伟大的原因:您可以控制单元(类、模块等)中使用的依赖项,而无需更改这些单元本身。非常适合测试或特定环境,就像您的情况一样。

因此,使用 MailService 的类必须由框架创建,然后可以通过以下方式注入(inject) MailService:

constructor(private mailService: MailService) {}

然后将使用您的 providers 数组中提供的实例。

<小时/>

如果这是不可能的,您当然可以在消费类本身中拥有逻辑(不是很好!):

const mailService = process.env.NODE_ENV === 'development' 
? new MailMockService()
: new MailService();

关于javascript - 如何使用Nest.js在开发中提供MockService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55462902/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com