我正在为我的项目编写测试。它使用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'",
答案 0 :(得分:0)
我遇到了同样的问题,并设法解决了以下问题:
错误:“ pretest”:“ NODE_ENV = test sequelize db:migrate && sequelize db:seed:all”
右:“ pretest”:“ NODE_ENV =测试序列化数据库:migrate && NODE_ENV = test 序列化数据库:seed:all”
答案 1 :(得分:0)
@gamofe将--debug
标志添加到命令以查看有关该错误的更多信息。例如
$ sequelize db:seed:all --debug
您很可能会收到此错误,因为您正在运行sequelize db:seed:all
而没有撤消以前的种子。如果表已包含要播种的数据,其中某些数据具有唯一约束,则将遇到唯一约束错误。
为了解决这个问题,您需要在播种之前运行sequelize db:seed:undo:all
。
您可以在https://sequelize.org/master/manual/migrations.html
答案 2 :(得分:0)
检查您的 queryInterface.bulkInsert()
或其他插入语句是否传递了 created_at
和 updated_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。