簡體   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