Le débogage des tests NESTJS E2E peut être incroyablement frustrant, surtout lorsque des problèmes apparemment simples surviennent en raison du comportement sans papiers. J'ai récemment rencontré un problème où mes tests E2E ont systématiquement échoué en raison du décorateur @Processor
dans les NESTJS. Il s'avère que ce décorateur introduit des complexités non immédiatement apparentes dans les tests.
Mes premières tentatives de résolution des échecs de test impliquaient plusieurs approches communes, toutes échouées:
ioredis-mock
Mocking: Tenter de se moquer de toute l'interaction redis avec ioredis-mock
n'a pas réussi à résoudre le problème sous-jacent. @Processor
et se moquant Le problème de base provenait de l'utilisation du décorateur @Processor
dans mon fichier src/user/audio.consumer.ts
. Le comportement de ce décorateur n'est pas explicitement détaillé dans la documentation NESTJS, conduisant à des échecs de test inattendus.
Ma configuration de test initial ressemblait à ceci:
<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>
Cela a échoué à cause du décorateur @Processor
. La solution a nécessité une approche plus ciblée pour se moquer:
<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>
En remplaçant explicitement le fournisseur AudioConsumer
avec un objet vide, j'ai contourné le comportement implicite du décorateur et j'ai résolu les défaillances du test. @Processor
soit résolu, je n'ai pas encore entièrement abordé les problèmes rencontrés avec TestContainers et une véritable instance Redis. Une enquête plus approfondie est nécessaire pour déterminer la cause profonde de ces échecs spécifiques. @Processor
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!