首頁 >web前端 >js教程 >當 NestJS 中的 ETests 讓我頭痛時

當 NestJS 中的 ETests 讓我頭痛時

DDD
DDD原創
2025-01-24 18:38:10256瀏覽

When ETests In NestJS Gives Me a Headache

>調試Nestjs E2E測試可能令人難以置信的令人沮喪,尤其是在由於無證件的框架行為而出現看似簡單的問題時。 最近,由於Nestjs中的裝飾器,我的E2E測試始終失敗,我最近遇到了一個問題。 事實證明,這種裝飾器引入了複雜性。 @Processor我最初解決測試失敗的嘗試涉及幾種常見的方法,這都是不成功的:

  1. 模擬:試圖模擬與ioredis-mock>的整個redis相互作用未能解決基本問題。 > ioredis-mock
  2. > testContainers:
  3. >利用測試範圍在測試過程中管理臨時redis實例也被證明是無效的。 > >
  4. 真實的redis實例:
  5. 即使使用功能齊全的運行redis實例,測試仍會繼續失敗。 >
  6. 根本原因:
和模擬

@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>

問題得到解決,但我尚未完全解決testContainers遇到的問題和真正的REDIS實例。 需要進一步研究以確定這些特定失敗的根本原因。

以上是當 NestJS 中的 ETests 讓我頭痛時的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn