Bienvenue dans ce workshop dédié à Cypress! Nous espérons qu'il vous plaira!
N'hésitez pas à :
npm
supérieur à 5.2.0 (car la commande npx
, c'est cool)git clone https://github.com/rbung/CypressWorkshop.git
cd CypressWorkshop
npm install
npm start
npx cypress open
00-hello.spec.js
Vous ĂȘtes maintenant prĂȘt! đȘ
Dans ce test, nous allons tester les principales fonctionnalités proposées par le site. L'objectif est de balayer l'ensemble des pages et de vérifier qu'elles sont correctement affichées. Nous allons aussi valider que les comportements de base fonctionnent correctement. A l'issue de cet exercice, vous serez familier avec les commandes de bases de Cypress: cy.visit
, cy.get
, cy.title
, should
, click
, etc.
01-critical-flow.spec.js
cypress/integration/01-critical-flow.spec.js
Dans ce test, nous allons tester la fonctionnalité d'authentification de maniÚre exhaustive.
02-login.spec.js
cypress/integration/02-login.spec.js
, compléter the TODOs.visit
. Pour y remĂ©dier, pensez que vous ĂȘtes dans un environnement Mocha
: vous avez donc Ă votre disposition les hooksC'est juste du JavaScript
đ)Dans la premiĂšre partie du test (celle concernant la partie non authentifiĂ©), on peut constater que les assertions sont trĂšs fines. Lorsqu'on lance le test, celui-ci Ă©choue: l'article n'existe pas cĂŽtĂ© serveur (il a pu ĂȘtre modifiĂ©/supprimĂ©).
Pour s'afficher, la page article
lance 2 requĂȘtes vers le serveur : une pour rĂ©cupĂ©rer les informations relatives Ă l'article et une autre pour rĂ©cupĂ©rer les commentaires liĂ©s Ă cet article.
Nous allons utiliser les commandes cy.server et cy.route pour contrÎler les appels réseaux qui nous intéressent!
Une fois le premier test passé. Nous allons utilisé la commande cy.route
en mode "pro" dans les autres tests pour simuler des erreurs (404, 500) ou avoir des temps de réponses différents et ainsi pouvoir facilement voir comment réagit notre site sur des cas limites.
03-article.spec.js
cypress/integration/03-article.spec.js
, compléter les TODOs de la premiÚre série de tests (context('In an anonymous context', ...
)Dans la deuxiĂšme partie du test, nous devons ĂȘtre authentifiĂ©. La fonctionnalitĂ© de login
est importante dans notre site. Elle peut ĂȘtre aussi utilisĂ©e pour afficher la page de settings
par exemple. Pour mutualiser du code à travers les différents tests, nous allons développer une custom command qui nous permettra de nous authentifier facilement dans nos tests.
Si reprendre le code que l'on a vu lors dans notre test de la page login
peut ĂȘtre tentant, ce n'est cependant pas la mĂ©thode la plus efficace! PlutĂŽt que d'utiliser l'interface pour s'authentifier, nous allons le faire de maniĂšre programmatique! đšâđ»
Dans le fichier cypress/support/commands.js
, la commande login
est dĂ©jĂ dĂ©clarĂ©e pour vous. Utiliser la commande cy.request pour faire une requĂȘte POST
sur le endpoint d'authentification https://docs.cypress.io/api/commands/request.html
puis utiliser la rĂ©ponse pour rĂ©cupĂ©rer le token et le positionner dans le local storage pour ĂȘtre authentifiĂ© applicativement!
window.localStorage.setItem("jwt", token);
cypress/integration/03-article.spec.js
, au niveau de la ligne context.skip('In an authenticated context', function() {
, supprimer le mot clĂ© skip ou bien le remplacer par le mot clĂ© only (pour ne pas ĂȘtre embĂȘtĂ© par la premiĂšre suite de tests)cypress/support/commands.js
cypress/integration/03-article.spec.js
Vous ĂȘtes arrivĂ©s jusque lĂ dans le temps imparti, bravo! đ
Si vous avez encore du temps, nous pouvons voir les sujets suivants:
Utiliser Cypress en local avec une interface graphique, c'est bien. Utiliser nos tests dans le cadre d'une intégration continue, c'est mieux! Nous allons découvrir comment exécuter nos tests en mode headless, utiliser le dashboard service de Cypress et une intégration continue sur le cloud: CircleCI.
La commande run de Cypress permet de lancer tout nos tests en mode headless (c'est-Ă -dire, sans avoir besoin d'interface graphique).
npx cypress run
Avec l'option record, nous allons pouvoir enregistrer différentes exécutions:
Log In
en haut Ă droiteRuns
de l'interface, ensuite cliquer sur le bouton Set up project to record
Un projectId
sera défini et sera automatiquement ajouté à votre fichier de configuration Cypress cypress.json
đ. Pensez Ă commitĂ© ce fichier.
Une ligne de commande cypress run
sera affiché avec le paramÚtre key
positionnĂ©. Prenez cette ligne de commande et exĂ©cutez-la dans votre terminal: votre test est en train d'ĂȘtre enregistrĂ©!
Dans cette partie, nous allons utiliser CircleCI. Cypress peut Ă©videmment s'interfacer avec de nombreuses solutions de CI (voir les exemples). Cependant, la tĂąche est plus facile avec CircleCI grĂące Ă l'orbe Cypress !
Add projects
)CYPRESS_RECORD_KEY
avec la clé qui a été généré en 1Úre partieComment ça marche ?
circle.yml
Dans ce test, nous allons tester un composant de maniÚre isolé. Pour notre exemple nous allons tester le composant Banner
.
import React from "react";
const Banner = ({ appName, token }) => {
if (token) {
return null;
}
return (
<div className="banner">
<div className="container">
<h1 className="logo-font">{appName.toLowerCase()}</h1>
<p>A place to share your knowledge.</p>
</div>
</div>
);
};
export default Banner;
L'application Ă©tant en React, nous allons utiliser le plugin cypress-react-unit-test
cypress/integration/04-component.spec.js
, compléter the TODOs.Nous espérons que vous avez apprécié ce workshop et que vous allez trÚs vite utiliser Cypress!
https://openfeedback.io/3BQH3sLpx0EfLHHC7Wng/2019-11-15/33
Remplissez le questionnaire: https://link.cypress.io/rodolphe-f
Sur Twitter