我正在使用 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
答案 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();
});
});
然后,使用特定的错误信息更新您的问题,我们可以为您提供进一步的帮助。