sequelize不插入数据库,(sequelize,nodejs,mocha,chai)

时间:2017-02-27 10:39:56

标签: node.js mocha sequelize.js chai

我正在使用 sequelize ORM与节点 js并在使用编写的测试用例中尝试在数据库中创建新记录 mocha 一个 chai ,测试用例被执行,以下是代码和输出

没有插入数据库 我期待数据库中的新记录,但它没有插入

const app = require('../../app');
const chai = require('chai');
const should = chai.should();
const expect = chai.expect();
const models = require('../../app/models/index');
const User = models.User;
let assert = chai.assert;

describe('Model:User - attribute: password_digest - unit tests', () => {
  it('password_digest should not be empty', (done) => {
    console.log('>>>1');
    console.log(User.create);
    User.create({
      email: 'aa@gmail.com',
      password: 'aa',
      password_confirmation: 'aa',
      role_id: 'User',
      profile_id: 'Consultant'
    }).then(function(user) {
      console.log('>>>2');
      console.log(user);
    });
    console.log('>>>3');
    done();
  });
});


Model:User - attribute: password_digest - unit tests
test_1           | >>>1
test_1           | [Function]
test_1           | >>>3
test_1           |     Γ£ô password_digest should not be empty

2 个答案:

答案 0 :(得分:2)

您需要在两个承诺处理程序中调用done(),并且只在那里调用:已完成的分支(then),所以在告诉mocha测试完成之前等待Promise解析,并且还要捕获任何错误(在catch分支中)。所以你的代码可能是:

it('password_digest should not be empty', (done) => {
    User.create({
      email: 'aa@gmail.com',
      password: 'aa',
      password_confirmation: 'aa',
      role_id: 'User',
      profile_id: 'Consultant'
    })
    .then(function(user) {
      // your user assertions
      console.log(user);
      done();
    }).catch(done);
  });

您的当前版本的测试会在致电done()后立即致电User.create,因此您没有给DB留出时间来执行插入。

同样使用done作为catch处理程序,可确保承诺链中的任何错误都不会阻止您的测试完成,并且可以为您打印错误。使用任何值调用done()都会将测试标记为失败。

答案 1 :(得分:1)

你的承诺可能是失败的。您需要检查错误日志以找出问题所在,或者处理您承诺的失败案例,例如:

describe('Model:User - attribute: password_digest - unit tests', () => {
  it('password_digest should not be empty', (done) => {
    console.log('>>>1');
    console.log(User.create);
    User.create({
      email: 'aa@gmail.com',
      password: 'aa',
      password_confirmation: 'aa',
      role_id: 'User',
      profile_id: 'Consultant'
    }).then(function(user) {
      console.log('>>>2');
      console.log(user);
    }).catch(function(err) {
      // Ideally, every time you handle the success of a promise 
      // with `then`, you should also handle the possible failure 
      // of it with `catch` 
      console.log('Error inserting user:');
      console.log(err);
    });
    console.log('>>>3');
    done();
  });
});

然后,使用特定的错误信息更新您的问题,我们可以为您提供进一步的帮助。