Automatiser les tests
Contexte
Il faut partir de la branche 262-teaming-webpack.
Cette branche utilise des "package managers" :
yarn pour le JS
et composer pour le PHP.
Donc, après un git checkout
, il faut exécuter :
composer install
yarn install
yarn build
Dans l'environnement de test, ceci pourrait être dans un hook Git, ou dans le .gitlab-ci.yml
.
Tests
Le système de test principal est décrit dans tests/README.md
.
./tests --html
Attention, je n'ai pas encore ajusté certains tests en Teacher*Cest
, dont il est normal qu'ils échouent pour cause de données fausses.
J'ai dû désactiver certains passages des tests pour éviter les nombreux alert()
JS de LabNbook :
c'est une commande qui arrête les processus JS, et d'expérience elle casse la reproductibilité des tests d'intégration.
Indépendamment des tests d'intégration, j'ai aussi quelques tests unitaires sur du JS. Comme cela pouvait difficilement se gérer par CodeCeption/PHP, ils en sont pour le moment indépendants :
yarn test
Dans un premier temps, je pense qu'on peut les ignorer. On verra ensuite si on les juxtapose aux tests de CodeCeption ou s'il y a un moyen simple de les fusionner.
Remarques
Si on veut accélérer le démarrage des tests dans le gitlab-runner,
il faut absolument disposer d'un cache pour les dépendances (node_modules/
et vendor/
).
Il faudrait aussi que yarn
et composer
soient pré-installés dans l'image Docker de base (celle contenant PHP CLI).
Gitlab propose un "Container registry" pour héberger les images Docker. A priori utile, mais il faudrait vérifier que l'instance du Gricad n'a pas de politique particulière à ce sujet.
Les tests "acceptance" sont configurés pour utiliser un navigateur Chromium installé localement avec son chromium-driver. Dans un premier temps, c'est suffisant. À terme, il faudra utiliser Selenium qui permet de piloter Chromium et Firefox. Ce sera sans doute via son image Docker
La base de données est réinitialisée après chaque test de CodeCeption. Pour accélérer, on pourra éventuellement configurer le MariaDB en mode bourrin. En local, j'utilise innodb-flush-log-at-trx-commit = 0.