繁体   English   中英

在“预测试”脚本中执行两个 Sequelize 命令时出现“错误:验证错误”消息

[英]"ERROR: Validation error" message when executing two Sequelize commands in "pretest" script

我正在为我的项目编写测试。 它使用 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'",

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

    $ sequelize db:seed:all --debug

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

我有同样的问题,并设法解决它如下:

错误:“预测试”:“NODE_ENV=test sequelize db:migrate && sequelize db:seed:all”

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

检查您的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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM