Les tests unitaires Javascript qui implique le DOM
Comment allez-vous les tests unitaires javascript qui utilise et modifie le DOM?
Je vais vous donner un exemple simple. Un validateur de formulaire qui vérifie vide les champs de texte, écrit en javascript et qui utilise JQuery.
function Validator() {
this.isBlank = function(id) {
if ($(id).val() == '') {
return true;
} else {
return false;
}
};
this.validate = function(inputs) {
var errors = false;
for (var field in inputs) {
if (this.isBlank(inputs[field])) {
errors = true;
break;
}
}
return errors;
};
}
Utilisation:
var validator = new Validator();
var fields = { field_1 : '#username', field_2 : '#email' };
if (!validator.validate(fields)) {
console.log('validation failed');
} else {
console.log('validation passed');
}
Quelle est la meilleure pratique pour tenter de test unitaire quelque chose comme cela?
- Découvrez PhantomJS. phantomjs.org
- Voir aussi Testing DOM manipuler dans le Jasmin test
- .et CasperJs: casperjs.org
- Pensais que c'était le grand débat. Au moins jusqu'à 7.20 sapin sûr. youtube.com/watch?v=rB5b67Cg6bc. Ne devrait certainement aider ...
Vous devez vous connecter pour publier un commentaire.
Idéalement, vous devriez diviser le code. La logique de validation ne nécessite pas vraiment de DOM accès, de sorte que vous vous mettez que dans sa propre fonction, et mettre de la logique qui traite les ID en une valeur qui est ensuite validée dans un autre.
En faisant cela, vous pouvez plus facilement de l'unité de test de la logique de validation, et si nécessaire, de faire un test fonctionnel sur l'ensemble de la chose en utilisant certains des outils proposés par Joseph le Rêveur.
Vous pouvez utiliser Qunit pour les tests unitaires impliquant des DOM. Si vous le souhaitez automatisé, vous pouvez utiliser Grunt avec grunt-contrib-qunit tâche qui lance vos pages dans une tête WebKit appelé PhantomJS.
Dans le cas peu probable où la plupart de votre code JavaScript contient la logique et de s'appuyer sur une petite quantité de code jQuery (ou vivent des éléments du DOM), vous pouvez refactoriser le code pour faire le remplacement de l'accès aux DOM/utilisation de jQuery facile et test d'écriture à la maquette des implémentations:
Et le test de fournir maquette de mise en œuvre: