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