NestJS Bull 队列:如何跳过测试环境中的处理?

2024-04-09

我在用着通过 Bull 的 NestJS 队列 https://docs.nestjs.com/techniques/queues并用 Jest 编写单元测试。我想跳过测试期间触发的作业的处理。

存在 GH 问题Bull 的测试模式 https://github.com/OptimalBits/bull/issues/962但他们不会实施。

最好我会避免广泛的嘲笑,这是一个简单的选择BullModule会是最好的。


我也遇到了困难,所以我发布了我的解决方案。我只是为此目的简化了我的代码,因此请谨慎使用,可能会有一些拼写错误等。

describe('JobCreatorService', () => {
  let service: JobCreatorService;
  let moduleRef: TestingModule;

  const exampleQueueMock = { add: jest.fn() };

  beforeEach(async () => {
    jest.resetAllMocks();
    moduleRef = await Test.createTestingModule({
      imports: [
        BullModule.registerQueue({
          name: EXAMPLE_QUEUE,
        }),
      ],
    })
      .overrideProvider(getQueueToken(EXAMPLE_QUEUE))
      .useValue(exampleQueueMock)
      .compile();

    service = moduleRef.get<JobCreatorService>(JobCreatorService);
  });

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

  it('should dispatch job', async () => {
    await service.methodThatDispatches();
    expect(exampleQueueMock.add).toHaveBeenCalledWith({example: jobData});
  });
});

我不建议进行具有副作用的单元测试 - 例如将数据存储在数据库或 redis 中,这就是这种方法的原因。但是,如果您更喜欢将作业实际存储在 Redis 中,您可能会在这里找到一些灵感:https://github.com/nestjs/bull/blob/master/e2e/module.e2e-spec.ts https://github.com/nestjs/bull/blob/master/e2e/module.e2e-spec.ts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestJS Bull 队列:如何跳过测试环境中的处理? 的相关文章

  • 预期间谍导航已使用 [ [ 'users' ] ] 调用,但在集成测试 Angular CLI 中从未调用过

    我在一个项目上实现了一个简单的集成测试 但它失败了 因为expect 行是在component save 方法之前执行的 当我将 Expect 行放在 setTimeout 上时 它会成功 没有setTimeout 如何成功 spec ts
  • PHP 中忽略 MySQL 外键约束

    有没有办法在 php 脚本中覆盖 mysql 外键约束 我有一个从 php 传递到 mysql 的查询 但它失败了外键约束 有没有办法在不改变数据库模式的情况下解决这个问题 我只是在做一些测试 所以完成后我将删除该行 pdo gt quer
  • 使用 TypeScript、Jest 和 Enzyme 进行 React 单元测试:无法调用可能“未定义”的对象

    我正在使用 TypeScript 构建一个 React Native 应用程序 我正在使用 Jest 和 Enzyme 进行组件测试 我也在使用 React 导航 在我的最后一个问题中 https stackoverflow com que
  • 玩笑 beforeAll() 在多个测试文件之间共享

    我有一个 Node js 项目 正在使用 Jest 进行测试 我有几个具有相同设置要求的测试文件 以前 所有这些测试都在一个文件中 所以我只有一个beforeAll 执行常见设置 现在 随着测试分成多个文件 似乎我必须复制 粘贴它befor
  • 异步运行 PHP 任务

    我正在开发一个较大的 Web 应用程序 后端主要是 PHP 代码中有几个地方我需要完成某些任务 但我不想让用户等待结果 例如 当创建一个新帐户时 我需要向他们发送一封欢迎电子邮件 但是 当他们点击 完成注册 按钮时 我不想让他们等到电子邮件
  • RabbitMQ 上的 Nack 和拒绝

    我想处理消费者从队列中获取的不成功的消息并将它们重新排队 想象一下我有这样的情况 P gt foo bar baz gt C 其中 foo bar 和 baz 是消息 如果消费者读到baz但出了问题 我可以使用basic reject or
  • 通过值获取 std::queue 中元素的索引

    有没有一种简单的方法来获取元素在 a 中的位置std queue通过它在 C 中的值 例如 std queue
  • MongoError:池正在耗尽,在集成测试中使用 MongoMemoryServer 时禁止新操作

    我在用着MongoMemoryServer编写集成测试 我有两个集成测试文件 当我运行 IT 测试时 我看到以下内容 我不明白为什么 我正在使用 jestjs 测试框架 当我有两个 IT 测试文件时 我看到以下错误 MongoError p
  • C/C++ 有哪些突变测试框架?

    突变测试 https secure wikimedia org wikipedia en wiki Mutation testing已经出现有一段时间了 似乎至少有一两个针对 C C 的商业突变测试框架 你用过它们吗 你有什么经历 有没有开
  • 执行bash脚本时如何显示行号

    我有一个测试脚本 其中有很多命令并将生成大量输出 我使用set x or set v and set e 因此当发生错误时脚本将停止 但我还是很难定位到哪一行执行停止了 从而定位问题所在 有没有一种方法可以在每行执行之前输出脚本的行号 或者
  • Nest JS构建不会生成dist文件夹

    我已经用nest js实现了rest api项目 它在本地环境中运行良好 pm start 我想构建并部署它 但构建命令不会生成dust文件夹 以下是我的配置 tsconfig json compilerOptions module com
  • 如何在 rspec 请求规范中设置请求标头?

    在控制器规范中 我可以像这样设置 http 接受标头 request accept application json 但在请求规范中 请求 对象为零 那么我在这里该怎么做呢 我想将 http 接受标头设置为 json 的原因是这样我可以这样
  • 如何像 urllib 这样的模拟/存根 python 模块

    我需要测试一个需要使用 urllib urlopen 它也使用 urllib urlencode 查询外部服务器上的页面的函数 服务器可能宕机 页面可能发生变化 我不能依赖它进行测试 控制 urllib urlopen 返回内容的最佳方法是
  • 有条件跳过 TestNG 测试

    我对 TestNG 注释没有太多经验 但是我正在尝试使用 TestNG 框架和 POM 设计模式为零售网站构建测试套件 我计划使用数据驱动的方法 我的计划是通过 Excel 驱动我的测试场景 而不是使用 testng xml 例如 我将拥有
  • 尝试在 Angular 项目中导入 date-fns 时,Jest 测试失败

    我最近将我的一个 Angular 项目更新到 Angular 13 更新后 我在尝试在项目中运行单元测试时遇到了一些奇怪的错误 我在一个新的 Angular 项目中创建了一个最小的示例来重现此行为 import format from da
  • 类验证器不验证数组

    我无法让类验证器工作 看起来我没有使用它 一切都像我没有使用类验证器一样工作 当发送正文格式不正确的请求时 我没有任何验证错误 尽管我应该这样做 My DTO import IsInt Min Max from class validato
  • 为什么 TestBed beforeeach 使用 waitForAsync 而不是仅仅使用 async/awaitcompileComponents?

    编辑 我在 Angular 上提出了一个问题 他们更新了文档 https github com angular angular issues 39740 https github com angular angular issues 397
  • Cypress Vue 组件测试从已挂载发出的事件

    我有一个 vue2 组件 它在其安装的生命周期挂钩中发出一个事件 该事件被发出 并且可以由使用该组件的页面处理 但是 我还想测试该事件是否在我的组件测试中发出 该测试使用赛普拉斯组件测试运行程序 这是一个精简版本 组件 TheCompone
  • Nest.js Google Login(passport.js) 与 SPA 前端(React)

    在我的全栈项目 Nest js React 中 我使用护照谷歌实现了谷歌登录 如下所示 import Controller Get Req UseGuards from nestjs common import AppService fro
  • 自动化 Windows UI 测试方法

    我们正在寻求设置自动化 UI 测试 并想知道最好的方法是什么 潜在的陷阱是什么 设置费用是否昂贵 提前致谢 B 自动化测试最大的消耗可能是时间 有很多非常昂贵的工具 但也有免费的工具 即使是昂贵的工具的成本也不太可能与正确设置自动化测试所需

随机推荐