我正在尝试测试在向我的一个控制器发送请求后,队列会推送作业。实现本身按预期工作。
这是我的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();
});
});
关于这里可能有什么问题的任何想法?谢谢!