Menyahpepijat ujian NestJS E2E boleh menjadi sangat mengecewakan, terutamanya apabila isu yang kelihatan mudah timbul disebabkan oleh tingkah laku rangka kerja yang tidak didokumenkan. Baru-baru ini saya menghadapi masalah di mana ujian E2E saya gagal secara konsisten kerana @Processor
penghias dalam NestJS. Penghias ini, ternyata, memperkenalkan kerumitan yang tidak dapat dilihat dengan serta-merta dalam ujian.
Percubaan awal saya untuk menyelesaikan kegagalan ujian melibatkan beberapa pendekatan biasa, semuanya tidak berjaya:
ioredis-mock
Mengejek: Percubaan untuk mengejek seluruh interaksi Redis dengan ioredis-mock
gagal menyelesaikan isu asas.@Processor
dan MengejekMasalah utama berpunca daripada penggunaan @Processor
penghias dalam fail src/user/audio.consumer.ts
saya. Tingkah laku penghias ini tidak diperincikan secara eksplisit dalam dokumentasi NestJS, yang membawa kepada kegagalan ujian yang tidak dijangka.
Persediaan ujian awal saya kelihatan seperti ini:
<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>
Ini gagal kerana @Processor
penghias. Penyelesaiannya memerlukan pendekatan yang lebih disasarkan untuk mengejek:
<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>
Dengan mengatasi pembekal AudioConsumer
secara eksplisit dengan objek kosong, saya memintas gelagat tersirat @Processor
penghias dan menyelesaikan kegagalan ujian.
Sementara isu @Processor
diselesaikan, saya masih belum menangani sepenuhnya masalah yang dihadapi dengan Testcontainers dan contoh Redis sebenar. Siasatan lanjut diperlukan untuk menentukan punca kegagalan khusus tersebut.
Atas ialah kandungan terperinci Apabila ETests Dalam NestJS Membuat Saya Sakit Kepala. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!