代码之家  ›  专栏  ›  技术社区  ›  leogoesger

SequelizeDatabaseError:由于并发更新,无法序列化访问

  •  0
  • leogoesger  · 技术社区  · 6 年前

    在里面 Mocha beforeEach 胡克,我在试着 destroy

    import { db } from '../src/db/models';
    
    export const truncateTable = () => {
      const promises = Object.keys(db).map(key => {
        if (key !== 'Sequelize' && key !== 'sequelize') {
          console.log(key);
          return db[key].destroy({ where: {} });
        }
      });
    
      return Promise.all(promises);
    };
    

    describe.only('application mutations', () => {
    
      beforeEach(() => truncateTable());
    
      ...
    

    我得到的错误是:

    SequelizeDatabaseError:由于并发错误,无法序列化访问

    1 回复  |  直到 6 年前
        1
  •  1
  •   mcranston18    6 年前

    TL/DR:在测试中,如果您想快速删除模型并重置数据库,请使用 sync .

    describe.only('application mutations', () => {
      beforeEach(async () => {
        await db.sync({force: true})
      });
    }
    

    如果您想单独销毁您的模型,您必须在启动新模型之前正确地等待您的承诺完成。目前,您的承诺正在一次启动,因此出现了Sequelize错误。

    export const truncateTable = async () => {
      const promises = Object.keys(db).map(key => {
        if (key !== 'Sequelize' && key !== 'sequelize') {
          await db[key].destroy({ where: {} });
        }
      });
    };
    
    // in your test file
    describe.only('application mutations', () => {
      beforeEach(async () => {
        await truncateTable();
      });
    })
    
    推荐文章