首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Sequelize Tests -有时验证错误

Sequelize Tests -有时验证错误
EN

Stack Overflow用户
提问于 2015-09-14 13:22:29
回答 2查看 3.8K关注 0票数 6

我通过Mocha / Chai在sequelize定义上运行单元测试,如下所示:

mocha tests.js一起运行的主tests.js

代码语言:javascript
复制
// Testing Dependencies
expect = require("chai").expect;
should = require("chai").should;
require('dotenv').load();

var Sequelize = require('sequelize');
var sequelize = new Sequelize(
    process.env.PG_DB_TEST,
    process.env.PG_USER,
    process.env.PG_PASSWORD, {
    dialect: "postgres",
    logging: false
});

var models = require('./models/db')(sequelize);

var seq_test = function (next) {
  return function () {
    beforeEach(function (done) {
        sequelize.sync({ force: true }).then(function() {
            done();
        });
    });

    afterEach(function (done) {
        sequelize.drop().then(function() {
            done();
        });
    });

    next();
  };
}

describe("Model Unittests", seq_test(function () {
  require("./models/tests/test_user.js")(models);
  require("./models/tests/test_interest.js")(models);
}));

test_user.js

代码语言:javascript
复制
var mockedUser = require("./mocks/user");

module.exports = function (models) {
  var User = models.user;
  it("User should have the correct fields", function (done) {
    User.create(mockedUser).then(function (result) {
      expect(result.pack()).to.include.all.keys(
            ["id", "name", "email", "intro"]
      );
      done();
    });
  });

  it("User should require an email", function (done) {
    User.create({
      "name": mockedUser['name']
    }).then(function (result) {
      expect.fail();
      done();
    }).catch(function (err) {
      expect(err['name']).to.be.equal('SequelizeValidationError');
      done();
    });
  });

  it("User should require a name", function (done) {
    User.create({
      "email": mockedUser['email']
    }).then(function (result) {
      expect.fail();
      done();
    }).catch(function (err) {
      expect(err['name']).to.be.equal('SequelizeValidationError');
      done();
    });
  });
}

有时(在Codeship (CI)上大约是15分中的1分),它会给出这个错误:

代码语言:javascript
复制
  Model Unittests
Unhandled rejection SequelizeUniqueConstraintError: Validation error
at Query.formatError (/home/rof/src/github.com/podtogether/pod-test-prototype/node_modules/sequelize/lib/dialects/postgres/query.js:402:16)
at null.<anonymous> (/home/rof/src/github.com/podtogether/pod-test-prototype/node_modules/sequelize/lib/dialects/postgres/query.js:108:19)
at emitOne (events.js:77:13)
at emit (events.js:169:7)
at Query.handleError (/home/rof/src/github.com/podtogether/pod-test-prototype/node_modules/pg/lib/query.js:108:8)
at null.<anonymous> (/home/rof/src/github.com/podtogether/pod-test-prototype/node_modules/pg/lib/client.js:171:26)
at emitOne (events.js:77:13)
at emit (events.js:169:7)
at Socket.<anonymous> (/home/rof/src/github.com/podtogether/pod-test-prototype/node_modules/pg/lib/connection.js:109:12)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:146:16)
at Socket.Readable.push (_stream_readable.js:110:10)
at TCP.onread (net.js:523:20)
  1) "before each" hook for "User should have the correct fields"

在本地,这些单元测试还没有失败(我可能已经运行过了……连续60次)。我之前看到过类似的问题,因为我没有在beforeEachafterEach中使用done回调。这两个都是异步的,需要等待才能继续。在修复之后,我在本地看不到这些问题。

有没有人能解释一下这个问题?(ssh进入Codeship并运行导致1/ ~15错误的测试)

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 06:20:37

我的QA数据库有这个问题。有时新记录会保存到数据库中,有时会失败。在我的dev工作站上执行相同的过程时,每次都会成功。

当我捕捉到错误并将完整的结果打印到控制台时,它确认违反了一个唯一的约束-具体地说,就是主键id列,它被设置为默认的自动递增的值。

我用记录作为数据库的种子,尽管这些记录的id也被设置为自动递增,但200多条记录的id分散在1和2000之间,但是数据库的自动递增序列被设置为从1开始。通常序列中的下一个id是未使用的,但偶尔它已经被占用,数据库将返回此错误。

我使用answer here将序列重置为在最后一条种子记录之后开始,现在它每次都有效。

如果您正在播种记录以在其上运行集成测试,则数据库自动增量序列可能未设置为跟随它们。Sequelize没有这个功能,因为它是一个简单的单命令操作,需要在数据库中运行。

票数 1
EN

Stack Overflow用户

发布于 2019-04-24 11:38:32

我有这个问题。这是由于种子设定后没有正确设置自动增量造成的。根本问题是我们的种子方法在种子方法中显式地设置了主键/自动增量键(id),这通常应该避免。我们删除ids,问题就解决了。

下面是我们找到解决方案的sequelize问题的参考:https://github.com/sequelize/sequelize/issues/9295#issuecomment-382570944

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32557766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档