MochaTest错误-UnhandledPromiseRejectionWarning:TypeError:完成不是函数

时间:2019-02-22 23:48:43

标签: mongodb npm mocha

我正在测试使用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

1 个答案:

答案 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);
});