使用 DB 事务进行隔离的 Jest 集成测试

时间:2021-02-12 16:13:09

标签: node.js jestjs knexjs

在我们的项目中,我们使用 Jest 编写了集成测试,首先在数据库中设置数据,运行测试逻辑,然后进行拆卸。

因为这些测试可以并行运行,所以我们必须为每个测试创建具有唯一值的设置(例如,电子邮件必须是唯一的),以便它使用数据库中的唯一键。

我们的想法是在每个测试开始之前模拟 DB 层并为它创建一个新事务,然后回滚它,这样我们就不必担心独特的测试设置和拆卸。

我能够使用以下代码模拟我们的数据库层(目前我们使用 knex),但我不知道如何在测试开始时创建事务,将其保存到某个“测试范围变量”,然后访问它并回滚它。

jest.mock('db.service', () => {
  const originalModule = jest.requireActual('db.service');

  return {
    ...originalModule,
    db: jest.fn(() => {
      // this db() function is called every time when we work with DB and returns knex instance
      // maybe something like originalModule.db().transacting(tx);
      return originalModule.db();
    }),
  };
});

有人知道怎么做吗?

0 个答案:

没有答案
相关问题