[英]Wrapping sequelize ORM tests in transactions
我正在寻找一种方法来使我的测试用例使用 sequelize ORM 事务。 这已经在 sequelize github 问题上讨论过:
寻找一种方法来执行以下操作:
describe('My test case', () => {
beforeEach(() => {
... create a transaction
})
afterEach(() => {
... roll back the transaction
})
..... RUN isolated tests
})
我习惯了 Django ORM,它在测试用例中默认执行此操作(其中包括自动管理迁移)。
本文中有一个 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
代码放在一个 function 中,并在你的测试文件中调用 function 以避免重复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.