繁体   English   中英

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

[英]How to provide MockService in development with Nest.js?

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

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

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();

我认为, import MailMockServiceModule绕过提供的MailService / MailMockService (代码仍然可以在providers数组中没有对象的情况下工作)。 但是如何告诉程序使用MailMockService

如果您自己创建服务的实例而不是使用nest的依赖项注入,那么您将无法达到框架的目的。

但是如何告诉程序使用MailMockService

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

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

constructor(private mailService: MailService) {}

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


如果这不可能,那么您当然可以在使用类本身中具有逻辑(不是很好!):

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

这是我的方法:

const mailerSvc = process.env.NODE_ENV === 'DEV' 
    ? require('path/to/mock')
    : require('path/to/real/thing')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM