Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →