SequelizeDatabaseError: не удалось сериализовать доступ из-за одновременного обновления - PullRequest
0 голосов
/ 18 ноября 2018

В Mocha test beforeEach hook, я пытаюсь 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 голосов
/ 18 ноября 2018

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