JavaScript promet Simplify Asynchrone Coding, mais les tester peut être délicat. Ce guide clarifie comment gérer efficacement les promesses dans les tests unitaires, en évitant les pièges courants et en améliorant la lisibilité du code. Un exemple de projet illustrant ces techniques est disponible sur le site Web de l'auteur (lien non fourni dans le texte d'origine).
Prise des clés:
chai-as-promised
Active les affirmations de promesses directes, améliorant la clarté du test. Getting Tharking (Mocha & Chai):
Installez Mocha et Chai:
npm install mocha chai
Une approche naïve pour tester les promesses entraîne souvent des tests verbeux et moins lisibles:
var expect = require('chai').expect; it('should do something with promises', function(done) { var blah = 'foo'; var result = systemUnderTest(); result.then(function(data) { expect(data).to.equal(blah); done(); }, function(error) { assert.fail(error); done(); }); });
le calcul done()
et la gestion des erreurs ajoutent une complexité inutile. Sans gestion des erreurs appropriée, une promesse rejetée pourrait conduire à un faux positif.
Mocha et promesses:
Le support de promesse intégré de Mocha simplifie ceci:
it('should fail the test', function() { return Promise.reject('this promise will always be rejected'); });
Une promesse rejetée échoue automatiquement au test. Notre exemple initial peut être amélioré:
var expect = require('chai').expect; it('should do something with promises', function() { var blah = 'foo'; var result = systemUnderTest(); return result.then(function(data) { expect(data).to.equal(blah); }); });
Le renvoi de la promesse élimine le besoin de done()
et la gestion des erreurs explicites.
Amélioration des tests avec chai-as-promised
:
installer chai-as-promised
:
npm install chai-as-promised
Cette bibliothèque permet des affirmations plus concises:
var chai = require('chai'); var expect = chai.expect; var chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); it('should do something with promises', function() { var blah = 'foo'; var result = systemUnderTest(); return expect(result).to.eventually.equal(blah); });
Le mot-clé eventually
gère la nature asynchrone de la promesse. N'oubliez pas de toujours retourner la promesse. Diverses affirmations chai fonctionnent avec eventually
.
Modèles utiles:
eventually.deep.equal
ou eventually.become
pour les comparaisons d'objets profonds. Promise.all
pour gérer plusieurs promesses simultanément (mais être conscient des odeurs de code potentielles de plusieurs affirmations dans un seul test). Promise.all
pour résoudre les promesses, puis comparer les résultats. to.be.rejected
et to.be.rejectedWith
pour les affirmations de rejet. before
, after
, beforeEach
et afterEach
. Promises et simulations / talons (avec sinon.js):
installer sinon.js:
npm install mocha chai
Utilisez sinon.stub().returns(Promise.resolve/reject(...))
pour créer des talons de retour de promesses. Considérez sinon-as-promised
pour un coup de promesse simplifié.
Conclusions:
avec Mocha, Chai et chai-as-promised
, les promesses de test deviennent beaucoup plus propres et plus lisibles. Retournez toujours les promesses de vos fonctions de test. Le projet d'échantillon fourni (lien non disponible) propose des exemples pratiques.
Questions fréquemment posées (FAQ): (Les FAQ d'origine sont omises en raison de la longueur et de la redondance. Ils couvrent largement les informations déjà présentes dans l'article.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!