Es6 promise 按承诺测试拒绝超时

Es6 promise 按承诺测试拒绝超时,es6-promise,chai,chai-as-promised,Es6 Promise,Chai,Chai As Promised,我应该如何测试拒绝: return new Promise(function(resolve, reject){ models.users.find({ where: { email: email } }).then(function(result){ if(!result)

我应该如何测试拒绝:

return new Promise(function(resolve, reject){
            models.users.find({
                where: {
                    email: email
                }
            }).then(function(result){
                if(!result)
                    throw 'Invalid password'
            }).catch(function(err){
                reject(err);
            });
        });
在我的测试中:

it('should be rejected', function(){
            let data= { req: {
                email: 'alvin@.oc',
            }};

            return User.authUser(data).should.be.rejected;
        });
它应该被拒绝,错误为“无效密码”,但我得到错误:

 Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure
it resolves.

您可以抛出错误并测试错误消息的内容。 你不必拒绝承诺,因为一个例外拒绝了承诺,你不应该将它包装在另一个承诺中:

   return models.users.find({
            where: {
                email: email
            }
        }).then(function(result){
            if(!result)
                throw new Error('Invalid password');
        });
在你的测试中:

return User.authUser(data).should.be.rejectedWith(Error).and.eventually.have.property("message").equal('Invalid password');
如果
models.users.find()
已返回承诺,则不应使用
newpromise
将其包装。FWIW,您的代码从不调用
resolve()
。。。