Estamos usando la biblioteca Umzug con Sequelize y queremos usarla para realizar pruebas, pero nuestro problema es que no podemos limpiar la base de datos después de ejecutar el primer conjunto de pruebas . Tal vez no entendamos algunos principios de la misma.
¿Cómo prepara la base de datos de prueba antes de ejecutar varios conjuntos de pruebas, que necesitan recrear una base de datos completamente limpia y cargar nuevamente los accesorios? Cualquier consejo y truco es bienvenido.
Código que tenemos hasta ahora (pero no limpia la base de datos correctamente)
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); }); }