JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 11 · Exercice de TD
Tester les messages
Erreurs, stockage et qualité du code · niveau 2
Énoncé
Écrire les tests de la fonction messageUtilisateur(e) de l'exercice 10.4. Comment fabriquer, sans réseau, une erreur de délai dépassé, une erreur réseau et une erreur 404 ? (Indication : une DOMException a un nom choisi à la création.)
Corrigé
Le module ex4-messages.mjs de l'exercice 10.4 lance des requêtes dès son chargement : l'importer dans un test les déclencherait. On sort donc la fonction dans un module sans effet de bord, messages.mjs (c'est le principe « des règles dans des modules purs »), et l'on fabrique les erreurs telles que fetch et obtenirJson les lèveraient :
import { test } from "node:test";
import assert from "node:assert/strict";
import { messageUtilisateur } from "./messages.mjs";
import { ErreurHttp } from "../../../ch10/obtenir-json.mjs";
test("délai dépassé", () => {
const e = new DOMException("signal timed out", "TimeoutError");
assert.match(messageUtilisateur(e), /trop de temps/);
});
test("panne réseau", () => {
assert.match(messageUtilisateur(new TypeError("Failed to fetch")), /Connexion impossible/);
});
test("404 et 503", () => {
assert.match(messageUtilisateur(new ErreurHttp(404, "…")), /n’existe pas/);
assert.match(messageUtilisateur(new ErreurHttp(503, "…")), /problème/);
});
test("une autre erreur garde son message", () => {
assert.equal(messageUtilisateur(new ErreurHttp(400, "quantité invalide")), "Erreur inattendue : quantité invalide");
});
Les quatre tests passent (exercices/ex7-tests/). assert.match vérifie une chaîne par une expression régulière : le test ne casse pas pour une virgule changée dans le message.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.