是否有必要通过单元测试甚至功能测试来覆盖
Sequelize
迁移以检查它们如何影响数据库结构?如果可以的话,该怎么办?
恕我直言,测试迁移是没有必要的。既不适合sequelize,也不适合任何其他像样的ORM。
我发现自己也有类似的问题。
就我而言,我在与我的模型不匹配的迁移中进行了更改,这影响了生产中的代码(无法
save
模型,因为 created_at
实际上是 createdAt
或类似的愚蠢的东西。)我们的单元测试没有发现这个问题,因为我们在 await sequelize.sync();
中使用了 setup.js
。
对我们有用的是:
import { up as createUsersMigration } from '../database/migrations/20220426100249-create_users.js';
// Repeat for each migration...
export const performDatabaseMigrations = async (sequelize, Sequelize) => {
await createUsersMigration(sequelize.getQueryInterface(), Sequelize);
// Repeat for each migration...
};
...并在我们的
setup.js
中调用此函数,而不是同步模型。
这使我们能够测试迁移是否有效,但就像@simon.ro所说,我们不测试迁移,只是模型与数据库匹配。
更新:最终我们确定了以下内容:
export const performDatabaseMigrations = async (sequelize, Sequelize) => {
const files = readdirSync('database/migrations');
for (const file of files) {
if (file === 'package.json') continue;
const migration = await import(`database/migrations/${file}`);
await migration.up(sequelize.getQueryInterface(), Sequelize);
}
};