【问题标题】:"ERROR: Validation error" message when executing two Sequelize commands in "pretest" script在“pretest”脚本中执行两个 Sequelize 命令时出现“错误:验证错误”消息
【发布时间】:2019-11-29 11:39:53
【问题描述】:

我正在为我的项目编写测试。它使用 Sequelize,我考虑过执行以下操作:

"pretest": "NODE_ENV=testing yarn sequelize db:migrate && yarn sequelize db:seed:all",
"test": "mocha --require @babel/register 'src/tests/**/*.spec.js'",
"posttest": "NODE_ENV=testing yarn sequelize db:migrate:undo:all"

但以下显示:

❯ yarn test     
yarn run v1.19.2
$ NODE_ENV=testing yarn sequelize db:migrate && yarn sequelize db:seed:all
$ /home/gabriel/Workspace/graphql-apollo/node_modules/.bin/sequelize db:migrate

Sequelize CLI [Node: 12.13.1, CLI: 5.5.1, ORM: 5.21.2]

Loaded configuration file "src/config/database.js".
== 20191123132531-create-users: migrating =======
== 20191123132531-create-users: migrated (0.047s)

== 20191123132658-create-messages: migrating =======
== 20191123132658-create-messages: migrated (0.028s)

$ /home/gabriel/Workspace/graphql-apollo/node_modules/.bin/sequelize db:seed:all

Sequelize CLI [Node: 12.13.1, CLI: 5.5.1, ORM: 5.21.2]

Loaded configuration file "src/config/database.js".
== 20191123132945-users: migrating =======

ERROR: Validation error

error Command failed with exit code 1.

如果我分别执行迁移和播种命令,它工作正常。我也尝试使用concurrently,但同样的情况。

"pretest": "concurrently 'NODE_ENV=testing yarn sequelize db:migrate' 'yarn sequelize db:seed:all'",

【问题讨论】:

    标签: node.js postgresql testing sequelize.js


    【解决方案1】:

    @gamofe 将--debug 标志添加到命令以查看有关错误的更多信息。例如

        $ sequelize db:seed:all --debug
    

    您很可能会收到此错误,因为您正在运行sequelize db:seed:all 而没有撤消先前的种子。如果您的表已经包含您尝试播种的数据,其中一些数据具有唯一约束,您将遇到唯一约束错误。 要解决此问题,您需要在播种前运行sequelize db:seed:undo:all。 你可以在这里找到更多信息https://sequelize.org/master/manual/migrations.html

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,并设法解决如下:

      错误:“pretest”:“NODE_ENV=test sequelize db:migrate && sequelize db:seed:all”

      右:“pretest”:“NODE_ENV=test sequelize db:migrate && NODE_ENV=test sequelize db:seed:all”

      【讨论】:

        【解决方案3】:

        检查您的queryInterface.bulkInsert() 或其他插入语句是否传递了created_atupdated_at 值。 sequelize 的种子部分不会自动添加这个 - 并且数据库对这些字段有 NOT NULL 限制。

        就我而言,我必须更改种子文件的内容以包含 createdAt 和 updatedAt 字段。

        我变了:

        module.exports = {
          up: async (queryInterface, Sequelize) => {
            await queryInterface.bulkInsert('Users', [
              { id:1, name: `God`, type: UserTypes.Person },
            ]);
          }
        }
        

        到:

        module.exports = {
          up: async (queryInterface, Sequelize) => {
            const currentTime = new Date(new Date().toUTCString()).toISOString();
            await queryInterface.bulkInsert('Users', [
              { id:++i, name: `God`, type: UserTypes.Person, createdAt: currentTime, updatedAt: currentTime },
            ]);
          }
        }
        

        注意:我使用underscored: true 选项。如果不这样做,则需要使用 created_at 和 updated_at 代替 createdAt 和 updatedAt。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-25
          • 2013-12-17
          • 2020-06-13
          • 1970-01-01
          • 1970-01-01
          • 2017-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多