繁体   English   中英

在交易中包装 sequelize ORM 测试

[英]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

})

当然你可以将beforeEachafterEach代码放在一个 function 中,并在你的测试文件中调用 function 以避免重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM