C’est le moment de mettre ensemble tous les éléments codés jusqu’ici pour
contempler le jeu de la vie s’épanouir devant nos yeux.
Seulement je n’ai pas d’idée claire sur la manière dont ça peut-être fait
en javascript, et même sur les problèmes que ça pourrait poser, et encore
moins sur la manière de tester ça avec Jasmine.
Le TDD n’est pas une religion ! Ce n’est pas un précepte qu’on suit
aveuglement. On peut, et on doit, le questionner. Comment écrire un test quand
on n’a pas la moindre idée du problème à résoudre ?
Quand cette situation m’arrive, j’expérimente. Et voilà le résultat de mon
expérimentation:
Maintenant que j’ai une meilleure connaissance du problème à résoudre, j’efface
toutes les modifications que je viens de faire et je recommence en TDD.
Enfin c’est ce que je ferais normalement sur un projet réèl. Là, j’ai la flemme.
Un meilleur affichage
Je vais simplement faire un zoom 4x. Repérez scale dans le code suivant pour
savoir ce que j’ai modifié.
Une surface de jeu «sans bord»
Autre amélioration, mais non des moindres, on va connecter les bords du
haut et du bas, ainsi que les bords de gauche et de droite. On aura ainsi un
tore.
Cette nouvelle fonctionnalité simule assez bien ce qu’il se passe dans le
boulot du monde réèl. Je pourrais modifier le code, le regarder fonctionner,
puis modifier les tests en conséquence. Je vois ça souvent. Seulement cette
façon de faire revient à écrire les tests après le code. Et ça, ça n’est
pas du TDD. Je vais d’abord modifier les test, quitte à en désactiver certains
temporairement, puis modifier le code pour faire passer les nouveaux tests.
C’est la fonction extractNeighborhood qui doit être modifée. Je vais donc
réécrire les expects de:
describe("returns the neighborhood of a border's cell", function() {
et de
describe("returns the neighborhood of a corner's cell", function() {
Cela fait 8 tests à réécrire. Je les ai tous désactivés, sauf le premier.
Je vais donc les refaire passer un par un. Pour mémoire, voici l’ancien code:
Et voici le code réécrit pour faire passer ce premier test:
Je réactive le second test, lance la suite de test pour confirmer qu’il
échoue, et voici le nouveau code:
Au tour du 3ème test. Pour le faire passer c’est extractLine que je dois
modifier.
Et enfin je réactive le 4ème test.
Puis je réactive les 4 tests restants (ceux des coins) et je vérifie que tout
passe. C’est un bon moment pour lancer le programme et vérifier visuellement
que des objets traversent bien les bords.
J’ai ensuite fait un peu de refactoring:
J’avoue que je ne sais pas si c’est mieux. Quoiqu’il en soit, vous pouvez
trouver le code complet sur Github.
La prochaine fois je m’attaquerais à la version Ruby/Opal.