[英]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
MailMockService
從Module
繞過提供的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.