0

Sequelize で Umzug ライブラリを使用しており、テストに使用したいのですが、最初のテスト スイートを実行した後にデータベースをクリーンにできないという問題があります。多分私達はそれのいくつかの原則を誤解しています。

完全にクリーンなデータベースを再作成し、フィクスチャを再度ロードする必要がある複数のテストスイートを実行する前に、テストデータベースをどのように準備しますか? ヒントとコツを歓迎します。

これまでのコード (ただし、データベースを正しくクリーンアップしません)

 describe('Create user password mutation - SUCCESS', () => {
                afterAll(async (done) => {
                    const dbModelsService = testService.getService(services.MODELS);
                    const sequelizeService = testService.getService(services.SEQUELIZE);
                    const sequelizeSetupOpts = getSequelizeSetupOpts(dbModelsService);
                    const umzug = getUmzugOptions(dbModelsService, sequelizeService);
                    await resetDbMigrations(sequelizeService, umzug);
                    await setupDevDb(sequelizeService, sequelizeSetupOpts, umzug, dbModelsService, true);
                    done();
                });
export const getSequelizeSetupOpts = (dbModels) => {
    return {
        models: dbModels,
        migrationsPath: '/app/lib/sequelize/migrations',
        fixtures: dbFixtures, // this is array of fixtures
        init: false,
    };
};
export const resetDbMigrations = async (sequelizeService, umzug) => {
    try {
        await sequelizeService.query('SET FOREIGN_KEY_CHECKS = 0');
        await resetMigrations(umzug);
        // await dbHardReset();
    } catch (e) {
        log.e('There occured an error when migrations were dropped down to 0.', e);
    } finally {
        await sequelizeService.query('SET FOREIGN_KEY_CHECKS = 1');
    }
};
export const setupDevDb = async (sequelizeService, sequelizeSetupOpts, umzug, dbModels, init = false) => {
    // Set up test database and load fixtures
    return runMigrations(umzug)
        .then(() => {
            if (init) {
                // return destroyModels(sequelizeService, dbModels);
            }
            return null;
        })
        .then(() => {
            if (init) {
                return loadFixtures(sequelizeSetupOpts);
            }
            return null;
        })
        .catch((e) => {
            log.e('There occured an error while running migrations with destroying models and loading fixtures.', e);
            throw e;
        });
};
function runMigrations(umzug) {
    // eslint-disable-next-line no-unused-vars
    return umzug
        .up()
        .then((migrations) => {
            console.info(`Running ${migrations.length} migrations...`);
        })
        .catch((err) => {
            log.e('Error while running migrations: ', err);
        });
}
4

0 に答える 0