>調試Nestjs E2E測試可能令人難以置信的令人沮喪,尤其是在由於無證件的框架行為而出現看似簡單的問題時。 最近,由於Nestjs中的@Processor
我最初解決測試失敗的嘗試涉及幾種常見的方法,這都是不成功的:
ioredis-mock
>的整個redis相互作用未能解決基本問題。 >
ioredis-mock
@Processor
核心問題源於在我的>裝飾器。 Nestjs文檔中未明確詳細詳細介紹此裝飾師的行為,導致了意外的測試失敗。 @Processor
>
src/user/audio.consumer.ts
我的初始測試設置看起來像這樣:
由於裝飾器而失敗。 該解決方案需要採取更具針對性的嘲笑方法:
<code class="language-typescript">import { getQueueToken } from '@nestjs/bullmq'; import { INestApplication } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; import * as request from 'supertest'; import { AppModule } from '../src/app.module'; import { mockBullMqService } from './bullmq.mock'; describe('AppController (e2e)', () => { // ... (beforeAll, afterAll omitted for brevity) it('/ (GET)', () => { return request(app.getHttpServer()) .get('/cart') .expect(200) .expect('Hi'); }); });</code>
@Processor
通過用一個空對像明確覆蓋
<code class="language-typescript">const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }) .overrideProvider(getQueueToken('YOUR_QUEUE_NAME')) .useValue({ on: jest.fn(), add: jest.fn(), process: jest.fn(), }) .overrideProvider(AudioConsumer) // Crucial addition .useValue({}) // Provide an empty value .compile();</code>裝飾者的隱式行為並解決了測試失敗。
剩下的挑戰:測試範圍和實際redisAudioConsumer
@Processor
>
以上是當 NestJS 中的 ETests 讓我頭痛時的詳細內容。更多資訊請關注PHP中文網其他相關文章!