javascript - 在事务中包装 sequelize ORM 测试

标签 javascript jestjs sequelize.js

我正在寻找一种方法来使我的使用 sequelize ORM 事务的测试用例。这已在 sequelize github 问题上进行了讨论:

  • https://github.com/sequelize/sequelize/issues/4823

  • 寻找一种方法来执行以下操作:
    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
    
    })
    
    当然你可以把 beforeEachafterEach在函数中编写代码并在测试文件中调用该函数以避免重复。

    关于javascript - 在事务中包装 sequelize ORM 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57815661/

    相关文章:

    javascript - 如何强制出现 "Save as"对话框?

    javascript - 在 Canvas 上自由绘图变得模糊

    javascript - Sequelize.js 创建太多回调

    node.js - 如何捕获 Sequelize 连接错误

    javascript - sequelize 用小时 = 2 解释日期

    php - 验证表单而不重定向

    javascript - 在我的案例中如何检测点击事件

    javascript - React 组件在浏览器中正确呈现,但呈现 : "Only a ReactOwner can have refs" 时 Jest 测试错误

    reactjs - Jest 文件夹结构

    javascript - 使用 Jest 测试时,componentWillUpdate 上的 nextState 不正确(还使用 react 路由器包装器)