>调试Nestjs E2E测试可能令人难以置信的令人沮丧,尤其是在由于无证件的框架行为而出现看似简单的问题时。 最近,由于Nestjs中的@Processor
我最初解决测试失败的尝试涉及几种常见的方法,这都是不成功的:
ioredis-mock
>的整个redis相互作用未能解决基本问题。>
ioredis-mock
@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
>
以上是当 NestJS 中的 ETests 让我头疼时的详细内容。更多信息请关注PHP中文网其他相关文章!