将CLS与Sequelize非托管交易配合使用

问题描述

我正在为我的代码编写单元测试,并希望使用transactions来防止测试之间出现任何杂散数据。

代码使用Sequelize ORM与数据库进行所有交互。由于不能更改实际代码,因此我将使用cls-hooked来维护事务上下文,而不是将事务传递给所有查询。但是,有一个问题。在阅读并尝试使用官方文档时,上述方法似乎仅适用于托管交易。

到目前为止,测试代码看起来像:

test("Test decription",async () => {
    try {
        await sequelize.transaction(async (t) => {
            //Actual test code
        });
    } catch (error) {
        //Do nothing if query rolled back
    }
});

我打算实现的目标(出于明显的原因):

let t;

beforeEach(async () => {
    t = await sequelize.transaction();
});

test("Test decription",async () => {
    //Actual test code
});

afterEach(async () => {
    await t.rollback();
});

这可能吗?如果是的话,将不胜感激。

解决方法

我遇到了同样的问题——经过多次谷歌搜索,我发现这个关闭的 issue 表明设计不支持非托管事务?