2017-09-19 5 views
0

Comment dois-je tester le rejet:chaï comme délai de refus de test promis

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

dans mon test:

it('should be rejected', function(){ 
      let data= { req: { 
       email: '[email protected]', 
      }}; 

      return User.authUser(data).should.be.rejected; 
     }); 

Il devrait être rejeté erreur Whit 'mot de passe non valide', mais j'obtiens l'erreur:

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

Si 'models.users. find() 'renvoie déjà une promesse, vous ne devriez pas l'envelopper en utilisant' new Promise'. FWIW, votre code n'appelle jamais 'resolve()' ... – robertklep

Répondre

1

Vous pouvez générer une erreur et tester le contenu du message d'erreur. Vous avez besoin de ne pas rejeter la promesse parce qu'une exception rejette la promesse et vous ne devriez pas l'envelopper dans une autre promesse:

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

et dans votre test:

return User.authUser(data).should.be.rejectedWith(Error).and.eventually.have.property("message").equal('Invalid password');