Сброс базы данных Sequelize - PullRequest
       9

Сброс базы данных Sequelize

0 голосов
/ 16 апреля 2020

Ситуация

Я пишу интеграционные тесты для Node.JS проекта, который использует Sequelize + Postgres. Я хотел бы убедиться, что тестовая база данных полностью сброшена до запуска тестов.

Дополнительная информация

  1. Я бы предпочел решение, которое выполняется через CLI + sequelize.
  2. Меня не волнует содержимое тестовой базы данных.
  3. Я не хочу, чтобы тестовый пользователь нуждался в каких-либо привилегиях вне тестовой базы данных.

У меня есть pretest скрипт, который запускается:

NODE_ENV=test yarn migrate

Исследование

Я считаю, db:drop и db:create не работают в postgres.

В Rails I может использовать db:migrate:reset

Я знаю, что у Sequelize есть db:migrate:undo:all, но я считаю, что откатывает каждую миграцию в отдельности, что кажется пустой тратой времени, если я собираюсь просто отбросить все таблицы.

Вопрос

Как наиболее эффективно выполнить sh цель запуска миграций в тестовой базе данных с чистого листа?

1 Ответ

0 голосов
/ 17 апреля 2020

Вы должны использовать Sequelize Command-Line Interface (CLI) , тогда вы можете использовать db:create и db:drop независимо от того, какую СУБД вы используете.

Вот использование, Я проверяю его, используя postgres:9.6:

☁  node-sequelize-examples [master] npx sequelize-cli db:drop

Sequelize CLI [Node: 10.16.2, CLI: 5.5.1, ORM: 5.21.3]

Loaded configuration file "src/config/config.js".
Using environment "development".
Executing (default): DROP DATABASE "node-sequelize-examples"
Database node-sequelize-examples dropped.
☁  node-sequelize-examples [master] npx sequelize-cli db:create

Sequelize CLI [Node: 10.16.2, CLI: 5.5.1, ORM: 5.21.3]

Loaded configuration file "src/config/config.js".
Using environment "development".
Executing (default): CREATE DATABASE "node-sequelize-examples"
Database node-sequelize-examples created.

src/config/config.js:

module.exports = {
  development: {
    username: process.env.POSTGRES_USER,
    password: process.env.POSTGRES_PASSWORD,
    database: process.env.POSTGRES_DB,
    host: process.env.POSTGRES_HOST,
    port: process.env.POSTGRES_PORT,
    dialect: 'postgres',
    logging: console.log,
  },
  test: {
    username: process.env.POSTGRES_USER,
    password: process.env.POSTGRES_PASSWORD,
    database: process.env.POSTGRES_DB,
    host: process.env.POSTGRES_HOST,
    port: process.env.POSTGRES_PORT,
    dialect: 'postgres',
  },
  production: {
    username: process.env.POSTGRES_USER,
    password: process.env.POSTGRES_PASSWORD,
    database: process.env.POSTGRES_DB,
    host: process.env.POSTGRES_HOST,
    port: process.env.POSTGRES_PORT,
    dialect: 'postgres',
  },
};

Проверьте базу данных, используя psql:

# psql -U testuser node-sequelize-examples
psql (9.6.11)
Type "help" for help.

node-sequelize-examples=# \d
No relations found.
...