1

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

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

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

我能够使用以下代码模拟我们的 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();
    }),
  };
});

有人知道怎么做吗?

4

0 回答 0