在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:由于并发,无法序列化访问 更新
答案 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();
});
})