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
Jennifer Anistonoriginal
2025-02-19 12:21:09335parcourir

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:

<code class="language-bash">npm install mocha chai</code>

Une approche naïve pour tester les promesses entraîne souvent des tests verbeux et moins lisibles:

<code class="language-javascript">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();
  });
});</code>

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:

<code class="language-javascript">it('should fail the test', function() {
  return Promise.reject('this promise will always be rejected');
});</code>

Une promesse rejetée échoue automatiquement au test. Notre exemple initial peut être amélioré:

<code class="language-javascript">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);
  });
});</code>

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:

<code class="language-bash">npm install chai-as-promised</code>

Cette bibliothèque permet des affirmations plus concises:

<code class="language-javascript">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);
});</code>

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:

<code class="language-bash">npm install mocha chai</code>

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:
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
Article précédent:Guide du guidon pour débutantArticle suivant:Guide du guidon pour débutant