如何测试 Sequelize 迁移?

问题描述 投票:0回答:2

是否有必要通过单元测试甚至功能测试来覆盖

Sequelize
迁移以检查它们如何影响数据库结构?如果可以的话,该怎么办?

testing migration sequelize.js
2个回答
3
投票

恕我直言,测试迁移是没有必要的。既不适合sequelize,也不适合任何其他像样的ORM。

  1. 迁移描述了必须如何更改数据库才能符合使用它的应用程序的当前状态。因此,从某种意义上说,它们不是应用程序本身的一部分。因此不需要测试。
  2. 迁移通常不实现任何自定义逻辑。他们只是调用迁移库的一堆方法。并且所使用的库本身应该经过彻底的单元测试。因此不需要额外的测试。

1
投票

我发现自己也有类似的问题。

就我而言,我在与我的模型不匹配的迁移中进行了更改,这影响了生产中的代码(无法

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);
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.