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