在我们的项目中,我们使用 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();
}),
};
});
有人知道怎么做吗?