茉莉花:testing返回的承诺是一个具体的例外

我有一个方法在我的node.js服务器,返回一个Promise – 抛出一个自定义exception( UserNotAuthenticatedError ) – 我想编写一个testing,以确保这个exception抛出时,必须。

方法如下:

 export function changePassword(userId, oldPass, newPass) { var query = User.findById(userId); return query.exec() .then(user => { if (user.authenticate(oldPass)) { user.password = newPass; return user.save(); } else { // I want to test that this Exception is thrown throw new UserNotAuthenticatedError(); } }); } 

我已经试过编写testing了,这是我迄今为止:

 describe('#changePassword', function() { it('should throw a UserNotAuthenticatedError when passing wrong password', function() { var userId = user._id; var wrongPwd = 'wrongpassword'; var newPwd = 'new password'; // so far the following only tells me that the Promise was rejected, but // I WANT TO TEST THAT THE REJECTION WAS DUE TO A 'UserNotAuthenticatedError' UserService.changePassword(userId, wrongPwd, newPwd).should.be.rejected; }); }); 

我已经完成了检查,返回的承诺被拒绝,但我也想更具体,并检查返回的承诺是一个UserNotAuthenticatedError 。 我怎么能这样做?

我终于find了一个更好的方法来解决它:

 it('should throw a UserNotAuthenticatedError when passing wrong password', function() { var userId = user._id; var wrongPwd = 'wrongpassword'; var newPwd = 'new password'; var promise = UserService.changePassword(userId, wrongPwd, newPwd); return promise.should.be.rejectedWith(UserNotAuthenticatedError); }); 

你不只是使用promise.catch(function(error){})并检查errorvariables,以确保它是正确的错误types?

我想有比我提出的更好的方法来处理这个问题。 不过这个应该工作。

 var promise = UserService.changePassword(userId, wrongPwd, newPwd); var error = null; promise.should.be.rejected; promise.then(function(){}, function(err){ expect(err).toEqual(jasmine.any(UserNotAuthenticatedError)); done(); }); 

在哪里完成的function可以作为parameter passing给它的方法。 它指定它是asynchronoustesting。