Rumah > hujung hadapan web > tutorial js > Apabila ETests Dalam NestJS Membuat Saya Sakit Kepala

Apabila ETests Dalam NestJS Membuat Saya Sakit Kepala

DDD
Lepaskan: 2025-01-24 18:38:10
asal
252 orang telah melayarinya

When ETests In NestJS Gives Me a Headache

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:

  1. ioredis-mock Mengejek: Percubaan untuk mengejek seluruh interaksi Redis dengan ioredis-mock gagal menyelesaikan isu asas.
  2. Bekas ujian: Menggunakan bekas Ujian untuk mengurus contoh Redis sementara semasa ujian juga terbukti tidak berkesan.
  3. Instance Redis Sebenar: Walaupun dengan contoh Redis yang berfungsi sepenuhnya, yang dijalankan, ujian terus gagal.

Punca Punca: @Processor dan Mengejek

Masalah 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>
Salin selepas log masuk

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>
Salin selepas log masuk

Dengan mengatasi pembekal AudioConsumer secara eksplisit dengan objek kosong, saya memintas gelagat tersirat @Processor penghias dan menyelesaikan kegagalan ujian.

Baki Cabaran: Testcontainers dan Real Redis

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan