gpt4 book ai didi

node.js - 重置 Sequelize 数据库

转载 作者:行者123 更新时间:2023-12-03 22:18:25 25 4
gpt4 key购买 nike

情况

我正在为使用 Sequelize + Postgres 的 Node.JS 项目编写集成测试。我想确保在运行测试之前完全重置测试数据库。

附加信息

  • 我更喜欢通过 CLI + sequelize 完成的解决方案。
  • 我不关心测试数据库的内容。
  • 我不希望我的测试用户需要测试数据库之外的任何权限。

  • 我有一个运行的 pretest 脚本:

    NODE_ENV=test yarn migrate

    探索

    我相信 db:dropdb:create 在 postgres 中不起作用。

    在 Rails 中,我可能会使用 db:migrate:reset
    我知道 Sequelize 有 db:migrate:undo:all 但我相信它会单独回滚每个迁移,如果我的意图只是删除所有表,这感觉就像是在浪费时间。

    问题

    如何最有效地实现从全新的测试数据库上运行迁移的目标?

    最佳答案

    您应该使用 Sequelize Command-Line Interface (CLI) ,然后无论您使用什么 RDBMS,您都可以使用 db:createdb: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.

    关于node.js - 重置 Sequelize 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61254567/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com