>웹 프론트엔드 >JS 튜토리얼 >Nestjs에서 etests가 두통을 줄 때

Nestjs에서 etests가 두통을 줄 때

DDD
DDD원래의
2025-01-24 18:38:10287검색

When ETests In NestJS Gives Me a Headache

NestJS E2E 테스트 디버깅은 엄청나게 실망스러울 수 있으며, 특히 문서화되지 않은 프레임워크 동작으로 인해 겉으로는 단순해 보이는 문제가 발생할 때 더욱 그렇습니다. 최근 NestJS의 @Processor 데코레이터로 인해 E2E 테스트가 지속적으로 실패하는 문제가 발생했습니다. 이 데코레이터는 테스트에서 즉각적으로 드러나지 않는 복잡성을 도입하는 것으로 나타났습니다.

테스트 실패를 해결하려는 초기 시도에는 몇 가지 일반적인 접근 방식이 포함되었지만 모두 실패했습니다.

  1. ioredis-mock 조롱: ioredis-mock과의 전체 Redis 상호 작용을 조롱하려는 시도는 근본적인 문제를 해결하지 못했습니다.
  2. Testcontainers: 테스트 중에 임시 Redis 인스턴스를 관리하기 위해 Testcontainers를 활용하는 것도 비효율적인 것으로 나타났습니다.
  3. 실제 Redis 인스턴스: Redis 인스턴스가 완벽하게 작동하고 실행되더라도 테스트는 계속 실패했습니다.

근본 원인: @Processor과 조롱

핵심 문제는 @Processor 파일 내에서 src/user/audio.consumer.ts 데코레이터를 사용하는 데서 발생했습니다. 이 데코레이터의 동작은 NestJS 문서에 명시적으로 자세히 설명되어 있지 않아 예기치 않은 테스트 실패로 이어집니다.

초기 테스트 설정은 다음과 같습니다.

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

AudioConsumer 공급자를 빈 개체로 명시적으로 재정의하여 @Processor 데코레이터의 암시적 동작을 우회하고 테스트 실패를 해결했습니다.

남은 과제: 테스트 컨테이너 및 Real Redis

@Processor 문제가 해결되었지만 아직 Testcontainers 및 실제 Redis 인스턴스에서 발생하는 문제를 완전히 해결하지 못했습니다. 이러한 특정 오류의 근본 원인을 파악하려면 추가 조사가 필요합니다.

위 내용은 Nestjs에서 etests가 두통을 줄 때의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.