node.js - 测试 NestJS 中是否触发了事件

标签 node.js typescript jestjs nestjs eventemitter

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

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

我们如何在不实际执行内部代码的情况下正确测试事件是否已被触发?

我们正在使用 Jest 进行测试。

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

有什么建议吗?

"node": "16.14.2"
"@nestjs/event-emitter": "^1.1.0",
"jest": "^27.5.1",

最佳答案

根据@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();
  });

关于node.js - 测试 NestJS 中是否触发了事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72198777/

相关文章:

javascript - 使用 for 循环增量打印数组项

javascript - typescript 错误 : TS2304: Cannot find name '$'

javascript - 如何在 gatsby 的 graphql 查询中使用正则表达式

reactjs - 如何在 typescript 和 antd 中使用 Form.create 和函数组件

testing - 每次都必须设置配置才能在 IntelliJ 中运行单独的 Jest 测试

javascript - 使用 console.log(object) 并迭代对象键时 JSON 键不同

javascript - Next.js 和 Jest : SyntaxError: Cannot use import statement outside a module

import - vscode 智能感知导入在 jest ts 测试中不起作用

reactjs - 如何 Jest 模拟 AWS 库

angular - typescript 中的函数定义错误