Test de la promesse rejetée dans Mocha / Chai
J'ai une classe qui rejette une promesse:
Sync.prototype.doCall = function(verb, method, data) {
var self = this;
self.client = P.promisifyAll(new Client());
var res = this.queue.then(function() {
return self.client.callAsync(verb, method, data)
.then(function(res) {
return;
})
.catch(function(err) {
//This is what gets called in my test
return P.reject('Boo');
});
});
this.queue = res.delay(this.options.throttle * 1000);
return res;
};
Sync.prototype.sendNote = function(data) {
var self = this;
return self.doCall('POST', '/Invoice', {
Invoice: data
}).then(function(res) {
return data;
});
};
Dans mon test:
return expect(s.sendNote(data)).to.eventually.be.rejectedWith('Boo');
Toutefois, si le test réussit, il envoyait le message d'erreur de la console.
Non gérée rejet d'Erreur: Boo
...
Avec les promesses des erreurs que j'ai utilisé se lier à des tests pour éviter l'erreur d'être jeté jusqu'à ce Chai peut encapsuler et de test:
return expect(s.sendNote.bind(s, data)).to.eventually.be.rejectedWith('Boo');
Toutefois, cela ne fonctionne pas avec cela et renvoie:
TypeError: [Function] is not a thenable.
Est-ce le bon moyen de tester cela?
source d'informationauteur cyberwombat
Vous devez vous connecter pour publier un commentaire.
Vous obtenez le message d'erreur parce que sendNote est rejeté et vous n'êtes pas à l'attraper.
Essayer:
Ressemble, vous aurez également à déplacer votre existant attraper un bloc:
(Avertissement: Ceci est une bonne question, même pour les personnes qui n'utilisent pas de Bluebird. J'ai posté une réponse similaire ici; cette réponse va travailler pour des gens qui ne sont pas à l'aide de Bluebird.)
avec chai-comme promis
Voici comment vous pouvez utiliser chai-comme promis, pour tester à la fois
resolve
etreject
cas d'une Promesse:sans chai-comme promis
Vous pouvez faire la même chose sans chai-comme promis, comme ceci:
Personnellement, j'utilise cet idiome:
C'est l'un des rares cas
then(onFulfilled, onRejected)
(2 arguments) est légitime d'utiliser.Si vous avez de la chaîne d'
.then(reject).catch(onRejected)
comme suggéré dans d'autres réponses, vous finissez d'entrer dans lecatch
gestionnaire chaque fois puisqu'il va attraper ainsi le rejet du produit dans le précédentthen
gestionnaire, qui peut causer evergreen tests si vous n'êtes pas assez prudent de vérifier cette hypothèse.Que j'ai rencontré le même problème, mais sur le fait de faire beaucoup de hacks j'ai trouvé une solution pour le test rejeté les promesses de moka.
écrire moka le code comme ci-dessous
REMARQUE:- Espère que vous le trouverez utile. Si vous avez une autre idée de la suggestion de faire un commentaire moi je suis novice en explorant la js monde