问题描述
我正在为我的代码编写单元测试,并希望使用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 表明设计不支持非托管事务?