正确承诺在摩卡测试中处理错误

时间:2015-11-24 22:45:10

标签: javascript mocha should.js

我正在使用Mongoose的承诺,用蓝鸟的方法将其包裹起来:

var mongoose = promise.promisifyAll(require('mongoose'))

然后我尝试使用异步方法:

var newUser = new User({email: 'd@a.com', password: '123', userType: 'admin', name: 'paco'});
newUser.saveAsync()
  .then(function (createdUser) {
    console.log(createdUser);
    should.exist(createdUser);
    done();
  })
  .catch(function (err) {
    console.log(err);
    should.not.exist(err);
    done();
  });

但是,由于架构获得了电子邮件字段的唯一索引,如果我尝试多次运行此操作,将会抛出Unhandled rejection AssertionError: expected Error,导致它们全部失败。

如何妥善处理任何错误?

1 个答案:

答案 0 :(得分:0)

首先,如果您尝试在每个测试中插入相同的数据,则只能进行第一次测试运行,因此您必须在每次测试运行之前清除数据库或删除此特定记录。

beforeEach(function() {
    return Model.findOneAndRemove({email: 'd@a.com'})
});

Mocha现在支持promises,因此不需要完成回调。您的测试可以重写为:

var newUser = new User({
     email: 'd@a.com', 
     password: '123',
     userType: 'admin', 
     name: 'paco'
});
return newUser.saveAsync().should.eventually.be.fulfilled();
// or return newUser.saveAsync().should.eventually.be.equal(value);