mocha.js - SequelizeDatabaseError:由于并发更新,无法序列化访问
问题描述
在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:由于并发更新,无法序列化访问
解决方案
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();
});
})
推荐阅读
- java - 在我们的服务上使用 DynamoDB 或 Redis
- python - 如何在python的数据框列中删除包含数字的单词
- rust - 为什么在包含闭包的选项中“一种类型比另一种更通用”?
- java - 模块描述符的主类属性是否仅适用于 JAR 文件?
- ffmpeg - ffmpeg 剪切视频并将音频放在它的中间
- mysql - 无法使用 flyway 配置文件迁移 mysql 脚本
- c# - 新 Azure Functions 项目中的“System.Reflection.AssemblyCompanyAttribute”属性重复
- php - 如何关闭 exec() 函数命令或关闭 exec() 函数运行的命令?
- unit-testing - vue 测试返回错误 wrapper.findComponent is not a function
- python - 添加弹跳球的恢复系数