Adloun

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

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 →