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

时间:2018-11-18 06:55:46

标签: mocha sequelize.js

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 个答案:

答案 0 :(得分:1)

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();
  });
})