recherche
Maisoninterface Webjs tutorielComment tester le code asynchrone avec Qunit

How to Test Asynchronous Code with QUnit

Points clés

  • Les fonctions asynchrones, comme les fonctions synchrones, nécessitent également des tests. Qunit fournit une méthode, QUnit.asyncTest(), en particulier pour tester le code asynchrone.
  • QUnit.asyncTest() Doit être utilisé en combinaison avec deux autres méthodes: QUnit.start() et QUnit.stop(). QUnit.start() est utilisé pour démarrer ou reprendre les tests d'exécution après l'arrêt du test, tandis que QUnit.stop() augmente le nombre de QUnit.start() appelle que le coureur de test doit attendre avant de continuer.
  • Ce tutoriel fournit des exemples de la façon d'utiliser ces méthodes dans la pratique. Il montre comment utiliser QUnit.start(), QUnit.stop() et QUnit.asyncTest() pour tester les fonctions qui calculent la valeur maximale d'un ensemble de paramètres de manière asynchrone.
  • Ce tutoriel recommande également que lors du test du code asynchrone pour les opérations AJAX, il est préférable de ne pas s'appuyer sur les données ou les résultats réels renvoyés par le serveur, car le serveur peut avoir des erreurs potentielles. Au lieu de cela, il recommande d'utiliser des bibliothèques comme jQuery Mockjax ou Sinon.js pour simuler les demandes AJAX.

Il y a quelques semaines, j'ai publié un article intitulé Démarrage avec Qunit, discutant des principaux concepts des tests unitaires et comment tester le code JavaScript à l'aide de QUnit. Dans ce post, je me suis concentré sur les affirmations fournies par le cadre et comment tester le code en cours d'exécution de manière synchrone. Cependant, si nous voulons discuter des cas réels, nous ne pouvons pas éviter de parler de fonctions asynchrones. Tout comme les fonctions synchrones, les fonctions asynchrones nécessitent une attention et encore plus de tests. Dans cet article, je vais vous apprendre à tester le code asynchrone à l'aide de Qunit. Si vous ne vous souvenez pas de la méthode d'affirmation disponible, ou si vous avez complètement manqué mon article, je vous suggère de lire pour démarrer avec Qunit. Les documents couverts dans cet article seront une condition préalable à cet article.

Créer des tests asynchrones à l'aide de Qunit

Chaque projet non trivial écrit en JavaScript contient des fonctions asynchrones. Ils sont utilisés pour effectuer une opération donnée après un certain temps, récupérer des données du serveur et même envoyer des données au serveur. Qunit fournit une méthode appelée QUnit.asyncTest() qui vise à tester le code asynchrone. La signature de cette méthode est la suivante:

QUnit.asyncTest(name, testFunction)
Les paramètres

ont la même signification que QUnit.test(), mais pour plus de commodité, je les signale ici:

  • name: une chaîne qui nous aide à identifier les tests créés.
  • testFunction: fonction contenant les affirmations que le cadre exécutera. Le cadre transmet un paramètre à cette fonction qui expose toutes les méthodes d'affirmation de Qunit.
Le fait que cette méthode accepte les mêmes paramètres que

peut être trompeur. Vous pourriez penser que le principe est le même, et tout ce que vous avez à faire pour tester une fonction asynchrone est de remplacer l'appel à QUnit.test() par QUnit.asyncTest() et c'est fait. Pas si vite! Pour accomplir son travail, QUnit.test() doit être utilisé en combinaison avec deux autres méthodes: QUnit.asyncTest() et QUnit.start(). Apprenez-en plus à leur sujet. QUnit.stop()

et QUnit.start() QUnit.stop()

Lorsque QUnit exécute un test créé à l'aide de

, il arrête automatiquement le programme d'exécution du test. Il attendra ensuite l'appel de fonction contenant l'affirmation QUnit.asyncTest(). Le but de QUnit.start() est de démarrer ou de reprendre des tests d'exécution après l'arrêt du test. Cette méthode accepte un entier comme son seul paramètre facultatif QUnit.start() pour fusionner plusieurs appels en un QUnit.start(). Le test peut être arrêté à l'aide de la méthode . QUnit.stop() Il augmente le nombre de appelle que le coureur de test doit attendre avant de continuer. Cette méthode accepte un entier comme seul paramètre facultatif qui spécifie le nombre d'appels supplémentaires à QUnit.start() que le cadre doit attendre. Sa valeur par défaut est 1. C'est un peu difficile à comprendre, non? La définition de la méthode impliquant sa méthode correspondante ressemble à un gâchis. Malheureusement, c'est exactement ce qu'ils font. La meilleure façon que je connaisse pour clarifier ces concepts est de vous donner un exemple d'utilisation spécifique. QUnit.start()

Intégrer tous les contenus

Dans cette section, nous mettrons l'approche discutée si loin en pratique. J'espère qu'une fois que vous l'avez lu, vous aurez une compréhension plus profonde de ce mécanisme. Commençons par un exemple simple en utilisant l'une des fonctions développées dans l'article en train de démarrer avec Qunit:

. Cette fonction prend n'importe quel nombre de paramètres et renvoie la valeur maximale. Le code de cette fonction est le suivant:

max()

Maintenant, disons que cette fonction s'exécutera généralement sur de très grands ensembles de paramètres. Nous voulons éviter que le navigateur de l'utilisateur soit bloqué jusqu'à ce que le résultat soit calculé. Pour ce faire, nous placerons l'appel
QUnit.asyncTest(name, testFunction)
avec une valeur de retard de 0 dans le rappel passé à

. Le code utilisé pour les fonctions de test asynchrones (il devrait vous faire sentir l'utilisation de max()) les suivants: window.setTimeout()

QUnit.asyncTest(name, testFunction)

Dans le code ci-dessus, j'ai enveloppé l'appel à la fonction max() comme un rappel de window.setTimeout(). Après avoir exécuté l'affirmation avec max(), nous appelons la méthode QUnit.start() pour permettre au coureur de test de reprendre son exécution. Si nous évitons d'appeler cette méthode, le coureur de test restera coincé et notre test échouera misérablement (en fait, le test est interrompu et ne fait rien d'autre, donc ce n'est pas un véritable échec de l'affirmation). L'exemple précédent devrait être facile à comprendre, car il est très similaire à son homologue synchrone. Cependant, le test d'une situation à lui seul ne nous convainc pas notre code. De plus, nous n'avons pas eu la chance de voir l'application pratique de QUnit.stop(). Pour résoudre ce problème, nous implémenterons toutes les affirmations que nous avons vues dans le post précédent dans la fonction transmise à QUnit.asyncTest(). Le code complet ressemble à ceci:

function max() {
   var max = -Infinity;
   for (var i = 0; i < arguments.length; i++) {
      if (arguments[i] > max) {
         max = arguments[i];
      }
   }

   return max;
}

Dans le test, nous avons défini le nombre d'affirmations que nous prévoyons d'exécuter, comme nous l'avons discuté pour démarrer avec Qunit. La fonction appelle ensuite la méthode QUnit.stop(). Cela est nécessaire car dans le test, nous avons effectué quatre appels asynchrones. Lorsque nous utilisons QUnit.asyncTest(), le framework attend uniquement un appel QUnit.start(). Si nous omettons l'appel QUnit.stop() et spécifions trois autres appels à QUnit.start(), le test échouera car le nombre attendu d'affirmations est différent du nombre d'affirmations exécutées. Une démonstration en direct du code qui inclut l'appel à expect() est présentée ci-dessous et fournie comme JSBIN.

tests asynchrones à l'aide de Qunit

Dans cette section, nous avons vu des exemples de code asynchrone qui n'effectue pas d'opérations Ajax. Cependant, vous souhaitez généralement charger des données ou envoyer des données au serveur. Lorsque cela se produit, il est préférable de ne pas compter sur les données ou les résultats réels renvoyés par le serveur, car il peut avoir des erreurs (vous savez, rien dans le logiciel n'est parfait). Pour éviter ce problème, vous devez simuler les demandes AJAX. Pour ce faire, vous pouvez utiliser jQuery Mockjax, Sinon.js ou toute autre bibliothèque qui répond à vos besoins.

Conclusion

Dans ce tutoriel, vous avez appris à créer des tests pour les fonctions asynchrones. Tout d'abord, nous discutons de la façon de déclarer un test impliquant un code asynchrone à l'aide de la méthode QUnit.asyncTest(). Ensuite, vous comprenez l'existence de deux autres méthodes QUnit.start() et QUnit.stop(), qui doivent être utilisées lors de la création de tests en utilisant QUnit.asyncTest(). Enfin, nous avons mis les connaissances acquises en pratique en développant deux tests pour démontrer comment ces méthodes fonctionnent ensemble. En utilisant les sujets abordés dans ce tutoriel, vous avez toutes les capacités dont vous avez besoin pour tester tout code que vous pourriez écrire dans JavaScript. J'aimerais savoir ce que vous pensez de ce cadre et si vous envisageriez de l'utiliser dans votre projet.

FAQ (FAQ) sur le test du code asynchrone avec Qunit

Qu'est-ce que le code asynchrone et pourquoi est-il important de le tester?

Le code asynchrone fait référence aux opérations qui peuvent être démarrées, exécutées et terminées en périodes de chevauchement. C'est une façon de programmation qui permet à plusieurs choses de se produire en même temps. Ceci est particulièrement utile dans les applications qui nécessitent de nombreuses opérations d'E / S ou nécessitent des tâches telles que l'obtention de données d'un serveur. Tester le code asynchrone est crucial car il permet de s'assurer que toutes les parties du code sont correctement exécutées, même si elles sont exécutées simultanément. Il aide à identifier tous les problèmes potentiels qui peuvent être causés par la chevauchement de l'exécution de différentes pièces de code.

Comment Qunit aide-t-il à tester le code asynchrone?

Qunit est un cadre de test unitaire JavaScript puissant et facile à utiliser. Il est capable de tester n'importe quel code JavaScript commun, y compris le code asynchrone. QUnit fournit une fonction utilitaire "asynchrone" qui facilite le test asynchrone. Cette fonction pause le programme d'exécution de test et la restaure après l'exécution du code asynchrone. Cela garantit que vos tests reflètent avec précision le comportement du code asynchrone.

Comment utiliser la fonction "async" dans QUnit pour tester le code asynchrone?

Utilisez la fonction "Async" dans QUnit en l'appelant dans la fonction de test. Cela renverra une fonction de rappel, que vous devez appeler une fois l'opération asynchrone terminée. Voici un exemple de base:

QUnit.asyncTest(name, testFunction)

Dans cet exemple, la fonction "Async" est utilisée pour suspendre le programme d'exécution de test jusqu'à ce que le rappel "Done" soit appelé.

... (Les questions et réponses de la FAQ restantes peuvent être réécrites de manière similaire en fonction du texte d'origine pour garder le contenu cohérent, mais la structure de la phrase et l'utilisation des mots ont changé pour éviter de copier complètement.)

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
JavaScript est-il écrit en C? Examiner les preuvesJavaScript est-il écrit en C? Examiner les preuvesApr 25, 2025 am 12:15 AM

Oui, le noyau du moteur de JavaScript est écrit en C. 1) Le langage C fournit des performances efficaces et un contrôle sous-jacent, qui convient au développement du moteur JavaScript. 2) Prendre le moteur V8 comme exemple, son noyau est écrit en C, combinant l'efficacité et les caractéristiques orientées objet de C. 3) Le principe de travail du moteur JavaScript comprend l'analyse, la compilation et l'exécution, et le langage C joue un rôle clé dans ces processus.

Rôle de JavaScript: rendre le Web interactif et dynamiqueRôle de JavaScript: rendre le Web interactif et dynamiqueApr 24, 2025 am 12:12 AM

JavaScript est au cœur des sites Web modernes car il améliore l'interactivité et la dynamicité des pages Web. 1) Il permet de modifier le contenu sans rafraîchir la page, 2) manipuler les pages Web via Domapi, 3) prendre en charge les effets interactifs complexes tels que l'animation et le glisser-déposer, 4) Optimiser les performances et les meilleures pratiques pour améliorer l'expérience utilisateur.

C et JavaScript: la connexion expliquéeC et JavaScript: la connexion expliquéeApr 23, 2025 am 12:07 AM

C et JavaScript réalisent l'interopérabilité via WebAssembly. 1) Le code C est compilé dans le module WebAssembly et introduit dans un environnement JavaScript pour améliorer la puissance de calcul. 2) Dans le développement de jeux, C gère les moteurs de physique et le rendu graphique, et JavaScript est responsable de la logique du jeu et de l'interface utilisateur.

Des sites Web aux applications: les diverses applications de JavaScriptDes sites Web aux applications: les diverses applications de JavaScriptApr 22, 2025 am 12:02 AM

JavaScript est largement utilisé dans les sites Web, les applications mobiles, les applications de bureau et la programmation côté serveur. 1) Dans le développement de sites Web, JavaScript exploite DOM avec HTML et CSS pour réaliser des effets dynamiques et prend en charge des cadres tels que JQuery et React. 2) Grâce à la réactnative et ionique, JavaScript est utilisé pour développer des applications mobiles multiplateformes. 3) Le cadre électronique permet à JavaScript de créer des applications de bureau. 4) Node.js permet à JavaScript d'exécuter le côté du serveur et prend en charge les demandes simultanées élevées.

Python vs JavaScript: cas d'utilisation et applications comparéesPython vs JavaScript: cas d'utilisation et applications comparéesApr 21, 2025 am 12:01 AM

Python est plus adapté à la science et à l'automatisation des données, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python fonctionne bien dans la science des données et l'apprentissage automatique, en utilisant des bibliothèques telles que Numpy et Pandas pour le traitement et la modélisation des données. 2. Python est concis et efficace dans l'automatisation et les scripts. 3. JavaScript est indispensable dans le développement frontal et est utilisé pour créer des pages Web dynamiques et des applications à une seule page. 4. JavaScript joue un rôle dans le développement back-end via Node.js et prend en charge le développement complet de la pile.

Le rôle de C / C dans les interprètes et compilateurs JavaScriptLe rôle de C / C dans les interprètes et compilateurs JavaScriptApr 20, 2025 am 12:01 AM

C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

JavaScript en action: Exemples et projets du monde réelJavaScript en action: Exemples et projets du monde réelApr 19, 2025 am 12:13 AM

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Javascript et le web: fonctionnalité de base et cas d'utilisationJavascript et le web: fonctionnalité de base et cas d'utilisationApr 18, 2025 am 12:19 AM

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles