# Tests d'application frontend nouvelle génération : Cypress.io
# Etat de l'art fin 2017
rappel déf + expliquer les principaux courants et tendances qui ont fait évoluer le dev web ces dernières années
# rappel définitions
# test unitaire
diff entre tests unitaires et tests de collaboration (impact sur le Behavior Driven Dev, article mocking is a code smell)
# test intégration
# test e2e
- fake (serveurs de mocks, configs applicatives différentes)
- true (stack réelle, environnement de stagging (preprod))
# devops
build en un clic
CI/CD/CD
always ready to deploy
importance des tests
boucle de feedback
# nouvelle architecture front
passage du templating côté serveur indissocié du backend à séparation nette du frontend qui devient une application à part entière consommant des endpoints REST. (SPA)
peut être une application hybride pour mobile
PWA, Reactive
de plus en plus de logique transférée côté front
de plus en plus de nouvelle logique côté front du fait de la complexification des IHM
# Selenium / Webdriver
(solution de testing actuelle datant du templating côté serveur)
- fonctionnement et problèmes
- lourd à mettre en oeuvre (binaire selenium, navigateur)
- flaky
- lent
mettre en évidence ces problèmes par l'exemple (sujet du tutu) plutôt que l'affirmer simplement
- décliner les solutions basées sur selenium / webdriver
- protractor, cuncumber, nightwatch
check browser.wait
. Permet de faire à peu près ce que fait cypress out of the box mais en devant coder tout.
cf doc officielle selenium avec les explicits et implicits waits.
# protractor vs cypress
sujet du tuto, prendre protractor qui est un grand classique d'utilisation de selenium pour tester des SPA AngularJS / Angular
et le comparer à cypress pour voir la plus-value de cypress
# théorie
# archi de selenium
explications de l'archi
# archi de cypress
explications de l'archi
# exemple basique
# TodoMVC
présententation de ce repo.
A ce stade on a une webapp toute bête qui utilise le localStorage comme backend.
# protractor
# installation + dépendances
# exécution
# cypress
# installation + dépendances
# exécution
manque réécriture des mêmes tests que pour protractor.
# ajouter un backend
un backend express sans BDD
avec simulation latence réseau + traitements serveurs via un timeout côté serveur
modifier la webapp en conséquence
on s'approche des conditions réelles
# impacts sur protractor
les tests fails
obligé d'ajouter des timeouts
augmentation de la durée d'exécution
les tests peuvent échouer + facilement
# impacts sur cypress
les tests sont toujours OK
exécution plus longue
possibilté de stub les xhr entrainant une amélioration de l'exécution
# simuler des problèmes
ajouter des erreurs dans le code front pour voir le debug
# debug avec protractor
# debug avec cypress
msg erreur, time travel, vidéos, usage debugger navigateur
# combinaison TI + fake e2e
# impacts protractor
très difficile à réaliser
# impacts e2e
les TI peuvent être écrits via cypress
données récupérées pour les tests e2e stubbés
# nouveau champ de test
- tester facilement le comportement du front en fonction des retours http (200, 4xx, 5xx, ...)
- assertions sur les payload de sortie du front (POST, PUT)