测试 NestJS 中是否触发了事件

tha*_*osk 3 node.js eventemitter typescript jestjs nestjs

在我们正在构建的项目中,工作流程中有一个标准的顺序。

  1. 控制器收到请求
  2. 然后通过 @nestjs/event-emitter 触发事件
  3. 事件监听器监听它并根据事件执行一些代码

我们如何正确测试事件是否已被触发但不实际执行其中的代码?

我们使用 Jest 进行测试。

用 Jest 进行模拟似乎不起作用,因为我们想要测试实际的触发事件而不是结果。

有什么建议么?

"node": "16.14.2"
"@nestjs/event-emitter": "^1.1.0",
"jest": "^27.5.1",
Run Code Online (Sandbox Code Playgroud)

tha*_*osk 5

根据 @ovidijus-parsiunas 的建议,我们成功地监视了“OnEvent”方法。

it.only("start selling", async () => {
    const user = await userSeeder.createOne();

    const spy = jest
      .spyOn(StartSellingListener.prototype, 'startSelling')
      .mockImplementation(() => null);

    expect(eventEmitter.hasListeners(EventsEnum.USER_START_SELLING)).toBe(true);

    const startSelling = userService.startSelling(user);
    expect(startSelling).toBeTruthy();

    expect(spy).toBeCalledWith(user);

    spy.mockRestore();
  });
Run Code Online (Sandbox Code Playgroud)