我正在寻找一种方法来使我的使用 sequelize ORM 事务的测试用例。这已在 sequelize github 问题上进行了讨论:
寻找一种方法来执行以下操作:
describe('My test case', () => {
beforeEach(() => {
... create a transaction
})
afterEach(() => {
... roll back the transaction
})
..... RUN isolated tests
})
我习惯了 Django ORM,它在测试用例中默认执行此操作(其中包括自动管理迁移)。
最佳答案
this article 中有一个关于 Jest 和 Sequelize 的示例.
使用您的代码示例,您可以执行以下操作:
import { sequelize } from './connection'
describe('My test case', async () => {
let transaction;
beforeEach(() => {
const cls = new Map();
Object.defineProperty(cls, 'run', {
value: fn => {
fn(this);
return this;
},
});
transaction = await sequelize.transaction();
sequelize.constructor._cls = cls;
sequelize.constructor._cls.set('transaction', transaction);
})
afterEach(async () => {
await transaction.rollback();
})
// ..... RUN isolated tests
})
当然你可以把 beforeEach
和 afterEach
在函数中编写代码并在测试文件中调用该函数以避免重复。
关于javascript - 在事务中包装 sequelize ORM 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815661/