Ce n'est probablement pas le premier tutoriel sur les tests que vous ayez jamais vu. Mais peut-être avez-vous eu des doutes sur les tests et n'avez jamais pris le temps de les lire. Après tout, cela peut sembler un travail supplémentaire sans raison.
Ce tutoriel a pour but de changer votre point de vue. Nous allons commencer au tout début: qu'est-ce qu'un test et pourquoi devriez-vous le faire? Ensuite, nous parlerons brièvement de l’écriture de code testable, avant de faire des tests! Allons-y!
Tout simplement, essai C’est l’idée d’avoir un ensemble d’exigences qu’un morceau de code donné doit satisfaire pour être suffisamment robuste pour être utilisé dans le monde réel. Souvent, nous écrivons du code JavaScript, puis nous l'ouvrons dans le navigateur et en cliquons un peu pour vérifier que tout fonctionne comme prévu. Bien que cela soit parfois nécessaire, ce n'est pas le type de test dont nous parlons ici. En fait, j'espère que ce didacticiel vous convaincra qu'un auto-test rapide et compliqué devrait compléter une procédure de test plus rigide: l'auto-test suffit, mais une liste complète des exigences est primordiale..
Comme vous pouvez le deviner, le problème des tests JavaScript d'actualisation et de clic est double:
En écrivant tests Pour vérifier tout ce que votre code doit faire, vous pouvez vérifier que votre code est au meilleur de sa forme avant de l’utiliser sur un site Web. Au moment où quelque chose tourne réellement dans un navigateur, il y a probablement plusieurs points d'échec. L'écriture de tests vous permet de vous concentrer sur chaque partie testable individuellement; si chaque pièce fait son travail correctement, les choses devraient fonctionner ensemble sans problème (tester des pièces individuelles comme cela s'appelle des tests unitaires).
Si vous êtes un polyglotte (programmeur), vous avez peut-être déjà testé dans d’autres langues. Mais j'ai trouvé en JavaScript une autre bête à vaincre. Après tout, vous ne construisez pas trop d'interfaces utilisateur dans, disons, PHP ou Ruby. Souvent, nous effectuons un travail DOM en JavaScript, et comment testez-vous cela exactement??
Eh bien, le travail DOM n’est pas ce pour quoi vous voulez écrire des tests; c'est la logique. Evidemment, la clé ici est de séparer votre logique et votre code d'interface utilisateur. Ce n'est pas toujours facile; J'ai écrit ma juste part d'interface utilisateur gérée par jQuery, et elle peut être assez compliquée assez rapidement. Cela rend non seulement difficile le test, mais la logique entrelacée et le code d'interface utilisateur peuvent également être difficiles à modifier lorsque le comportement souhaité change. J'ai découvert que l'utilisation de méthodologies telles que les modèles (aussi, modèles) et pub / sub (aussi, pub / sub) facilite l'écriture, le code plus testable..
Encore une chose, avant de commencer à coder: comment écrivons-nous nos tests? Vous pouvez utiliser de nombreuses bibliothèques de tests (et de nombreux bons tutoriels pour vous apprendre à les utiliser; voir les liens à la fin). Cependant, nous allons construire une petite bibliothèque de tests à partir de zéro. Ce ne sera pas aussi sophistiqué que certaines bibliothèques, mais vous verrez exactement ce qui se passe.
Dans cet esprit, au travail!
Nous allons créer une micro-galerie de photos: une simple liste de miniatures, avec une image en taille réelle au-dessus d’elles. Mais d'abord, construisons une fonction de test.
À mesure que vous en apprendrez plus sur les tests et les bibliothèques de tests, vous découvrirez de nombreuses méthodes de test permettant de tester toutes sortes de spécificités. Cependant, tout peut se résumer à savoir si deux choses sont égales ou non: par exemple,
Alors, voici notre méthode pour tester l'égalité:
var TEST = areEqual: function (a, b, msg) var result = (a === b); console.log ((résultat? "PASS:": "FAIL:") + msg); retourne le résultat; ;
C'est assez simple: la méthode prend trois paramètres. Les deux premiers sont comparés et, s’ils sont égaux, les tests réussissent. Le troisième paramètre est un message décrivant le test. Dans cette simple bibliothèque de tests, nous exportons simplement nos tests sur la console, mais vous pouvez créer une sortie HTML avec le style CSS approprié si vous le souhaitez..
Ici se trouve le areNotEqual
méthode (dans la même TESTER
objet):
areNotEqual: fonction (a, b, msg) résultat var = (a! == b); console.log ((résultat? "PASS:": "FAIL:") + msg); retourne le résultat;
Vous remarquerez les deux dernières lignes de sont égaux
et areNotEqual
le même. Donc, nous pouvons tirer ceux-ci comme ceci:
var TEST = areEqual: function (a, b, msg) retourne this._output (a === b, msg), areNotEqual: fonction (a, b, msg) retournera this._output (a! == b, msg); , _output: function (result, msg) console [result? "log": "avertir"] ((résultat? "PASS:": "FAIL:") + msg); retourne le résultat; ;
Génial! La chose intéressante ici est que nous pouvons ajouter d'autres méthodes de «sucre» en utilisant les méthodes que nous avons déjà écrites:
TEST.isTypeOf = fonction (obj, type, msg) retour this.areEqual (typede obj, type, msg); ; TEST.isAnInstanceOf = fonction (obj, type, msg) retour this._output (obj instance du type, msg); TEST.isGreaterThan = function (val, min, msg) renvoie this._output (val> min, msg);
Vous pouvez expérimenter cela vous-même; après avoir suivi ce tutoriel, vous aurez une bonne idée de son utilisation..
Alors, créons une galerie photo très simple, en utilisant notre mini TESTER
cadre pour créer des tests. Je mentionnerai ici que si le développement piloté par les tests est une excellente pratique, nous ne l’utiliserons pas dans ce didacticiel, principalement parce que ce n’est pas quelque chose que vous pouvez apprendre dans un seul tutoriel; il faut beaucoup de pratique pour vraiment grok. Lorsque vous débutez, il est plus facile d'écrire un peu de code, puis de le tester..
Alors commençons. Bien sûr, nous aurons besoin de HTML pour notre galerie. Nous garderons cette jolie base:
Test en JavaScript
Il y a deux choses principales à noter ici: premièrement, nous avons un cela tient le balisage très simple pour notre galerie d'images. Non, ce n'est probablement pas très robuste, mais cela nous permet de travailler avec quelque chose. Ensuite, notez que nous connectons trois
>