繁体   English   中英

Sequelize.js在创建实例时返回错误

[英]Sequelize.js returns error on create instance

我遇到的问题是,当我尝试创建新实例并将其保存到数据库时,我用mocha进行的单元测试始终返回错误。

模型:

//db is a global instance of the sequelize pool connection
var sequelize = require('sequelize');
var users = db.define('users', {
    uuid: {
        type: sequelize.STRING(36),
        allowNull: false,
        unique: true,
        validate: {
            isUUID: 4
        }
    },
    username: {
        type: sequelize.STRING(100),
        allowNull: false,
        unique: 'idxProvUsr'
    }
}, {
    freezeTableName: true
});
module.exports = users;

控制器:

var usersDB = require('../models/users');
var sequelize = require('sequelize');
var usersCtrl = {
userCreate: function (userData, callback) {
        var test = usersDB.build(userData);
        test.save()
            .then(function (data) {
                callback(true, data);
            })
            .catch(function (error) {
                if (error) {
                    callback(false, error);
                }
            });
    },
};
module.exports = usersCtrl;

测试:

'use strict';
var chai = require('chai');
var uuid = require('node-uuid');
var userCtrl = require('../app/controllers/users');

var userData = {
    uuid: null,
    username: 'manuerumx'
};

describe('Users Controller', function(){
    it('Fails add new User', function(done){
        userCtrl.userCreate(userData, function(isOk, response){
            chai.expect(isOk).to.equal(false);
            done();
        });
    });
    it('Add new User', function(done){
        userData.uuid = uuid.v4();
        userCtrl.userCreate(userData, function(isOk, response){
            chai.expect(isOk).to.equal(true);
            done();
        });
    });
});

第一次单元测试还可以。 未添加实例,因为需要uuid字段。

第二,是问题。 该实例已添加到数据库,但是catch指令始终返回相同的错误:

{ [AssertionError: expected true to equal false]
  message: 'expected true to equal false',
  showDiff: true,
  actual: true,
  expected: false }

已经测试了相同的结果:

usersDB.build(userData).save().then(...).catch(...);
usersDB.create(userData).then(...).catch(...);

我做错了什么? 是因为我在回调中使用了Promise?

不是isUUID验证,我已经尝试将其删除。

我想,问题与异步执行有关。 当第一个测试尚未完成时,userData.uuid会第二秒获得值。 尝试在第二个测试中定义并传递另一个用户数据:

    it('Add new User', function(done){
        var correctUserData = {
              uuid: uuid.v4(),
              username: "manuerumx"
        };
        userCtrl.userCreate(correctUserData, function(isOk, response){
            chai.expect(isOk).to.equal(true);
            done();
        });
    });

暂无
暂无

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

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