0

我正在尝试测试在向我的一个控制器发送请求后,队列会推送作业。实现本身按预期工作。

这是我的app.module.ts

    @Module({
    imports: [
    HttpModule,
    TypeOrmModule.forRoot(typeOrmConfig),
    BullModule.forRoot({
      redis: {
        host: redisConfig.host,
        port: redisConfig.port,
      },
    }),
    // Bunch of unrelated modules
     ],
     providers: [
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,
    },
    ],
     controllers: [SomeControllers],
    })
    export class AppModule {}

这就是我的import.module.ts(使用队列的模块)的样子:

@Module({
  imports: [
    BullModule.registerQueue({
      name: importQueueName.value,
    }),
   //More unrelated modules,
  ],
  providers: [
    //More services, and bull consumer and producer,
    ImportDataProducer,
    ImportDataConsumer,
    ImportDataService,
  ],
  controllers: [ImportDataController],
})
export class ImportDataModule {}

所以正如我所说,在功能上实现效果很好

我试图遵循这种方法

哪个没有在 beforeAll 钩子中注册队列,我得到了

 Driver not Connected

这种做法

在测试套件的 beforeAll 挂钩中注册了一个队列,我得到:

 TypeError: Cannot read properties of undefined (reading 'call')

      at BullExplorer.handleProcessor (node_modules/@nestjs/bull/dist/bull.explorer.js:95:23)
      at MapIterator.iteratee (node_modules/@nestjs/bull/dist/bull.explorer.js:59:26)
      at MapIterator.next (node_modules/iterare/src/map.ts:9:39)
      at FilterIterator.next (node_modules/iterare/src/filter.ts:11:34)
      at IteratorWithOperators.next (node_modules/iterare/src/iterate.ts:19:28)
          at Function.from (<anonymous>)
      at IteratorWithOperators.toArray (node_modules/iterare/src/iterate.ts:227:22)
      at MetadataScanner.scanFromPrototype (node_modules/@nestjs/core/metadata-scanner.js:12:14)
      at node_modules/@nestjs/bull/dist/bull.explorer.js:56:34
          at Array.forEach (<anonymous>)

这是我的“基本测试套件”:

describe('Queue test suite', () => {
  let app: INestApplication;
  const importQueue: any = { add: jest.fn() };
  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule, ImportDataModule],
    })
      .overrideProvider(importQueueName.value)
      .useValue(importQueue)
      .compile();

    app = moduleFixture.createNestApplication();
    app.useGlobalPipes(
      new ValidationPipe({
        transform: true,
        whitelist: true,
        forbidNonWhitelisted: true,
      }),
    );
    await app.init();
  });

  afterAll(async () => {
   
    await app.close();
 
  });

  test('A job should be pushed', async () => {
    await request(app.getHttpServer())
      .post('/some/route')
      .attach('file', __dirname + '/some.file')
      .expect(HttpStatus.CREATED);
   

    expect(importQueue.add).toHaveBeenCalled();
  });
});

关于这里可能有什么问题的任何想法?谢谢!

4

0 回答 0