我正在用Nest.JS开发一个后端API,到目前为止效果很好。
最近我用Jest添加了测试,效果很好。
但是,我遇到了一个问题,我不知道如何解决这个问题。
我使用EventEmitter2来发出和处理事件。所以基本上是在服务函数上,我在数据库上执行一些操作,然后发出一个自定义事件,这样另一个处理程序就可以做一些事情。
当我调用API时,这就像一种魅力。然而,它在测试环境中不起作用。
我没有得到任何错误,一切似乎都工作,但事件没有被消耗,当在测试中(console.log没有出现,但当从“外部”API调用时,它按预期工作)。
// the same test function calls the function that will emit an event
// i add delay to ensure the event can be consumed in the meantime
jest.setTimeout(30000);
it('should contain metadata', async () => {
await new Promise((r) => setTimeout(r, 5000));
const response = await controller.findAll(testAccount);
// it should contain metadata, but it is still undefined, so event is not consumed
这是测试设置:
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
EventEmitterModule.forRoot(),
MyModule,
//..
],
}).compile();
this.eventEmitter.emit('event', { data });
// the consumer
@OnEvent('event')
async handleEvent
1条答案
按热度按时间fnvucqvd1#
问题似乎出在OnEvent装饰器上,所以你可以做的是在你的服务的构造器中添加监听器:
当然不是一个完美的解决方案。认为问题在于TypeScript编译的某个地方。