J'ai fait quelques TDD avec Javascript dans le passé, et ce que je devais faire était faire la distinction entre les tests unitaires et d'intégration.Selenium va tester votre site global, avec la sortie du serveur, ses post-retours, les appels ajax, tout ça. Mais pour les tests unitaires, rien de tout cela n'est important.
Ce que vous voulez, c'est juste l'interface utilisateur avec laquelle vous allez interagir, et votre script. L'outil que vous utiliserez pour cela est JsUnit, qui prend un document HTML, avec des fonctions Javascript sur la page et les exécute dans le contexte de la page. Donc, ce que vous allez faire est d'inclure le HTML extensible sur la page avec vos fonctions. À partir de là, vous pouvez tester l'interaction de votre script avec les composants de l'interface utilisateur dans l'unité isolée du code HTML, votre script et vos tests.
Cela peut être un peu déroutant alors voyons si nous pouvons faire un petit test. Permet à certains TDD de supposer qu'après le chargement d'un composant, une liste d'éléments est colorée en fonction du contenu de l'objet LI.
tests.html
<html>
<head>
<script src="jsunit.js"></script>
<script src="mootools.js"></script>
<script src="yourcontrol.js"></script>
</head>
<body>
<ul id="mockList">
<li>red</li>
<li>green</li>
</ul>
</body>
<script>
function testListColor() {
assertNotEqual($$("#mockList li")[0].getStyle("background-color", "red"));
var colorInst = new ColorCtrl("mockList");
assertEqual($$("#mockList li")[0].getStyle("background-color", "red"));
}
</script>
</html>
Il est évident que TDD est un processus en plusieurs étapes, donc pour notre contrôle, nous aurons besoin de plusieurs exemples.
yourcontrol.js (étape 1)
function ColorCtrl(id) {
/* Fail! */
}
yourcontrol.js (étape 2)
function ColorCtrl(id) {
$$("#mockList li").forEach(function(item, index) {
item.setStyle("backgrond-color", item.getText());
});
/* Success! */
}
Vous pouvez probablement voir le point de la douleur ici, vous devez garder votre code HTML maquette ici sur la page en synchronisation avec la structure de ce que seront vos contrôles serveur. Mais vous obtenez un bon système pour TDD avec JavaScript.