我正在测试使用Mocha在mongoDB中创建用户。以下是创建用户的测试。 主要问题是,对此进行runnig npm测试时出现2个错误: 1.终端停滞/滞后,从未完成测试。 2.引发错误:“(node:21233)UnhandledPromiseRejectionWarning:TypeError:done不是函数”我是否处理了done的诺言?
目录结构 项目
|-> src
->user.js
|-> project
->create_test.js
->test_helper.js
create_test.js
//startoffile
const assert = require('assert');
const User = require ('../src/user');
describe('Creating records', () => {
it('saves a user', () => {
//run an assertion: validate data
let joe = new User({ name: 'Joe' });
joe.save().then( (done) => {
assert(!joe.isNew);
done();
});
});
});
//endoffile
它引用user.js文件来创建用户。
user.js
//startoffile
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var UserSchema = new Schema({
name: String
});
var User = mongoose.model('user', UserSchema);
module.exports = User;
//endoffile
此外,还有一个帮助程序文件,其中包含一些挂钩,这些挂钩正在测试连接并将所有数据删除到表中。
test_helper.js
//startoffile
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
before( (done) => {
mongoose.connect('mongodb://localhost/users_test');
mongoose.connection
.once('open', () => { done(); })
.on('error', (error) => {
console.warn('Warning', error);
});
});
beforeEach((done) => {
mongoose.connection.collections.users.drop(
() => {
done();
});
});
//endoffile
答案 0 :(得分:1)
如果您查看堆栈跟踪,应该看到它来自done
块下面的it
,因为您没有将其传递到it
回调中。 (因此,它应显示为it('saves a user', (done) => {
)
describe('Creating records', () => {
it('saves a user', () => {
//run an assertion: validate data
let joe = new User({ name: 'Joe' });
joe.save().then( (done) => {
assert(!joe.isNew);
done();
});
});
});
mocha
支持承诺,因此您可以重写该代码以返回承诺(而不是使用done
)。
it('saves a user', () => {
let joe = new User({name: 'Joe'});
return joe.save()
.then(() => assert(!joe.isNew));
});
或者如果您使用的是async/await
:
it('saves a user', async () => {
let joe = new User({name: 'Joe'});
await joe.save()
assert(!joe.isNew);
});