Skip to content

💡 [REQUEST] - Migrer les tests basés sur mocks vers MSW (handlers + data centralisés) #2655

Description

@shikanime

Description

Les tests du monorepo reposent majoritairement sur des mocks de haut niveau : vitest-mock-extended (mockDeep), vi.mock (src/__mocks__/prisma.ts) et vi.spyOn sur les clients ts-rest.
Ces mocks couplent les tests à la forme interne des services : renommer une méthode ou changer un schéma Prisma casse les tests sans aucun changement de comportement observable.
Seuls 6 specs clients de apps/server-nestjs (gitlab, keycloak, nexus, registry, sonarqube, vault) utilisent déjà MSW.

Objectif : migrer les tests basés sur mocks vers MSW, avec handlers et fixtures centralisés dans un dossier msw/ (handlers + data) réutilisable, plutôt que des setups setupServer(...) dupliqués dans chaque spec.

Périmètre :

  • apps/client : remplacer les vi.spyOn(apiClient.*) des stores par des handlers MSW interceptant le vrai appel HTTP du xhr-client.
  • apps/server-nestjs : généraliser MSW à tout ce qui est frontière HTTP ; les mocks Prisma (accès base, non-HTTP) restent hors périmètre.
  • plugins/* : mêmes handlers MSW que server-nestjs pour les clients externes, via un partage dans packages/ si pertinent.

PRs liées

Issues liées

Exemples simples

  • apps/client/src/stores/project.spec.ts : listProjects mocké à la main → handler http.get('*/api/v1/projects') servi depuis msw/data/projects.ts.
  • apps/server-nestjs/src/modules/vault/vault-client.service.spec.ts : handlers inline → extraits vers msw/handlers/vault.ts + fixtures msw/data/vault.ts.

Spécifications techniques

  • MSW 2.x est déjà dans le catalog pnpm (msw: ^2.12.10).
  • Structure cible par application : src/test/msw/handlers/<domaine>.ts (handlers) et src/test/msw/data/<domaine>.ts (fixtures typées depuis @cpn-console/shared).
  • server.listen() / resetHandlers() / close() centralisés dans un setup Vitest (vitest.config.ts → test.setupFiles).

Définition du fini

  • Aucun vi.spyOn(apiClient.*) HTTP ne subsiste dans les specs de apps/client (grep -rn "spyOn(apiClient" apps/client/src vide)
  • Les specs clients externes de apps/server-nestjs hors MSW sont migrées vers des handlers MSW
  • Les handlers et fixtures sont centralisés dans un dossier msw/ (handlers + data) et partagés entre server-nestjs et les plugins concernés
  • La suite unitaire passe : pnpm test

Activity

  1. shikanime commented on Sep 3, 2026

    @shikanime
    MemberAuthor

    Décision de périmètre : MSW n'interceptant que du HTTP, les mocks Prisma (src/__mocks__/prisma.ts, mockDeep<PrismaService>) restent hors périmètre — un accès base n'est pas un frontière HTTP modélisable en handlers.
    vitest-mock-extended reste donc autorisé pour les dépendances non HTTP (services internes, Prisma) ; la migration vise les frontières HTTP uniquement (clients externes, appels API du xhr-client).

  2. self-assigned this
    on Sep 3, 2026
  3. added this to the 9.26.0 milestone on Sep 3, 2026
  4. modified the milestones: 9.26.0, 9.27.0 on Sep 14, 2026
  5. locked and limited conversation to collaborators on Sep 17, 2026
  6. converted this issue into a discussion #2743 on Sep 17, 2026
  7. added theissue type on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions