Maison > interface Web > js tutoriel > Promesses dans les tests unitaires JavaScript: le guide définitif

Promesses dans les tests unitaires JavaScript: le guide définitif

Jennifer Aniston
Libérer: 2025-02-19 12:21:09
original
317 Les gens l'ont consulté

Promises in JavaScript Unit Tests: the Definitive Guide

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:

  • La manipulation des promesses dans les tests unitaires peut être complexe, conduisant à des faux positifs s'ils ne sont pas gérés soigneusement.
  • Le support de promesse intégré de Mocha échoue automatiquement les tests sur les promesses rejetées, simplifiant le processus.
  • chai-as-promised Active les affirmations de promesses directes, améliorant la clarté du test.
  • Renvoyez toujours une promesse de votre fonction de test pour s'assurer que Mocha le reconnaît et le gère correctement.

Getting Tharking (Mocha & Chai):

Installez Mocha et Chai:

npm install mocha chai
Copier après la connexion
Copier après la connexion

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();
  });
});
Copier après la connexion

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');
});
Copier après la connexion

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);
  });
});
Copier après la connexion

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
Copier après la connexion

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);
});
Copier après la connexion

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:

  • Comparaison des objets: utiliser eventually.deep.equal ou eventually.become pour les comparaisons d'objets profonds.
  • Propriétés d'objets spécifiques: La chaîne promet d'accéder et de s'affirmer sur des propriétés spécifiques. Les fonctions de flèche ES6 peuvent améliorer la lisibilité.
  • Promesses multiples: Utiliser Promise.all pour gérer plusieurs promesses simultanément (mais être conscient des odeurs de code potentielles de plusieurs affirmations dans un seul test).
  • Comparaison de plusieurs promesses: Utiliser Promise.all pour résoudre les promesses, puis comparer les résultats.
  • Échecs affirmant: Utiliser to.be.rejected et to.be.rejectedWith pour les affirmations de rejet.
  • Test Crochets: promet de travailler de manière transparente dans les crochets de Mocha before, after, beforeEach et afterEach.

Promises et simulations / talons (avec sinon.js):

installer sinon.js:

npm install mocha chai
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal