Vue : construire une application web (école d'ingénieur) · Chapitre 12 · Application directe du cours
Réessayer après une panne
Projet : la Librairie en application Vue · niveau 2
Énoncé
Le serveur répond 500 au chargement du catalogue, puis se rétablit. Écrire un test qui vérifie que l'alerte s'affiche, qu'un clic sur « Réessayer » relance la requête, et que la liste apparaît alors à la place de l'alerte. Quel réglage du store du catalogue rend ce bouton nécessaire ?
Corrigé
// Exercice 12.7 : réessayer après une panne du serveur.
import { test, expect, vi, afterEach } from "vitest";
import { mount, flushPromises } from "@vue/test-utils";
import PageCatalogue from "@/pages/PageCatalogue.vue";
import { preparer, livre } from "./aide.js";
afterEach(() => vi.unstubAllGlobals());
test("panne, clic sur Réessayer, catalogue", async () => {
const reponses = [
{ ok: false, status: 500, json: async () => ({ erreur: "Panne simulée du serveur." }) },
{ ok: true, status: 200, json: async () => [livre()] },
];
vi.stubGlobal("fetch", vi.fn(async () => reponses.shift()));
const { plugins } = await preparer("/");
const page = mount(PageCatalogue, { global: { plugins } });
await flushPromises();
console.info("1. alerte :", page.find("[role='alert'] p").text());
await page.find("[role='alert'] button").trigger("click");
await flushPromises();
console.info("2. après Réessayer :", page.find("[role='alert']").exists() ? "alerte" : "pas d'alerte",
"|", page.findAll(".carte h2").map((h) => h.text()));
expect(page.findAll(".carte")).toHaveLength(1);
});
1. alerte : Le catalogue n’a pas pu être chargé. Le serveur a répondu 500.
2. après Réessayer : pas d'alerte | [ 'Le Petit Prince' ]
Le store du catalogue ne charge qu'une fois (dejaCharge) : revenir sur la page après une panne ne relancerait pas forcément la requête si elle avait réussi entre-temps, et une page affichée en échec n'a aucune raison de réessayer seule. Le bouton appelle charger({ forcer: true }).
100 % gratuit
La suite du chapitre est sur Adloun
- 9 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.