// Contrat de loadMonaco : le SUCCÈS est partagé, l'ÉCHEC est réessayable. Un chunk manquant ne doit // pas condamner l'éditeur pour toute la session (c'était le cas : la promesse rejetée restait // mémoïsée, donc la zone d'édition restait vide et muette jusqu'au rechargement de la page). // Le cache vit au niveau du module : ce fichier garde donc UN seul test, ordonné. import { describe, expect, it } from 'vitest'; import type * as Monaco from 'monaco-editor'; import { loadMonaco } from '../src/composables/useMonaco'; const fake = { editor: {} } as unknown as typeof Monaco; describe('loadMonaco', () => { it('ne mémoïse pas un échec, mémoïse un succès', async () => { let failed = 0; const failing = (): Promise => { failed++; return Promise.reject(new Error('chunk absent')); }; await expect(loadMonaco(failing)).rejects.toThrow('chunk absent'); await expect(loadMonaco(failing)).rejects.toThrow('chunk absent'); expect(failed).toBe(2); // l'import est réellement retenté let ok = 0; const working = (): Promise => { ok++; return Promise.resolve(fake); }; await expect(loadMonaco(working)).resolves.toBe(fake); await expect(loadMonaco(working)).resolves.toBe(fake); expect(ok).toBe(1); // succès partagé : un seul import }); });