2016-11-02 4 views
0

У меня возникла проблема, когда мой модульный тест с mocha всегда возвращает ошибку, когда я пытаюсь создать новый экземпляр и сохранить его в db.Sequelize.js возвращает ошибку при создании экземпляра

Модель:

//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.

Вторая проблема. Экземпляр добавляется в базу данных, но команда поймать возвращение всегда та же ошибка:

{ [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(...); 

Что я делаю неправильно? Это потому, что я использую обещания с обратными вызовами?

Не является проверкой isUUID, я уже пытаюсь ее удалить.

ответ

1

Я полагаю, проблема связана с выполнением async. Хотя первый тест не завершен, 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(); 
     }); 
    }); 
+0

Тилов, вы правы. Тестирование модуля теперь работает. Большое спасибо. – manuerumx