Skip to content

Commit 6c6f891

Browse files
Ajouter la fonction createMockService dans la doc pour faciliter les tests de contrôleurs CRUD.
1 parent c1c4b6c commit 6c6f891

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

docs/technical/Tests.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
- [Exemple](#exemple-7)
3131
- [Exemple complet d'un cas de test](#exemple-complet-dun-cas-de-test)
3232
- [Configuration du Test](#configuration-du-test)
33+
- [Test d'un controller CRUD](#test-dun-controller-crud)
34+
- [Vue d'ensemble](#vue-densemble)
35+
- [Fonction : `createMockService`](#fonction--createmockservice)
36+
- [But](#but)
37+
- [Paramètres](#paramètres)
38+
- [Retours](#retours)
39+
- [Exemple d'utilisation](#exemple-dutilisation-1)
3340
- [Références supplémentaires](#références-supplémentaires)
3441

3542
## Introduction
@@ -346,6 +353,50 @@ afterAll(async () => {
346353
});
347354
```
348355

356+
## Test d'un controller CRUD
357+
Cette documentation fournit un aperçu détaillé de la fonction utilitaire `createMockService`, conçue pour faciliter la création de services mock pour les besoins de test dans les applications TypeScript, en mettant un accent particulier sur celles utilisant Jest et NestJS. L'initiation du test est similaire à celle des tests de services au niveau du module et de l'instantiation de la base mongoDB.
358+
359+
### Vue d'ensemble
360+
La fonction `createMockService` améliore dynamiquement la création de services mock, permettant de configurer un nombre arbitraire de comportements d'appel de méthode de manière dynamique. Elle simplifie le processus de configuration des implémentations mock pour les méthodes de service, supportant à la fois des valeurs fixes et des comportements dynamiques définis par des fonctions, y compris des comportements asynchrones basés sur des promesses et la gestion des erreurs.
361+
362+
### Fonction : `createMockService`
363+
364+
#### But
365+
366+
Générer une instance de service mock avec des méthodes simulées selon les comportements spécifiés, rationalisant le test de divers scénarios incluant le succès, l'échec, et les exceptions.
367+
368+
#### Paramètres
369+
370+
- **service** (`new (...args: any[]) => T`): Le constructeur de la classe de service à mocker. Ce paramètre prend une référence de classe que le service mock va imiter.
371+
372+
- **methodStubs** (`Record<string, any[] | any>`): Un objet où les clés représentent les noms des méthodes à mocker, et les valeurs sont les comportements à simuler pour ces méthodes. Ces comportements peuvent être spécifiés comme des valeurs uniques pour un comportement uniforme à travers les appels, des tableaux de valeurs pour définir des comportements séquentiels d'appels, des fonctions pour calculer dynamiquement les valeurs de retour, ou des instances de `Error` pour simuler des exceptions.
373+
374+
#### Retours
375+
376+
- **T**: Une instance mock de la classe de service (`T`), avec des méthodes simulées comme spécifié par le paramètre `methodStubs`.
377+
378+
#### Exemple d'utilisation
379+
380+
```typescript
381+
service = createMockService<IdentitiesService>(IdentitiesService, {
382+
create: [
383+
() => Promise.resolve({ ...IdentitiesDtoStub(), _id, state: IdentityState.TO_VALIDATE }),
384+
() => Promise.resolve({ ...IdentitiesDtoStub(), _id, state: IdentityState.TO_COMPLETE }),
385+
],
386+
findAndCount: [
387+
() => Promise.resolve([[{ ...IdentitiesDtoStub(), _id }], 1]),
388+
() => Promise.reject(new Error('Erreur')), // Fonction qui lance une erreur
389+
],
390+
// Autres simulations de méthodes...
391+
});
392+
```
393+
394+
Dans cet exemple, la fonction `createMockService` est utilisée pour mocker un `IdentitiesService` avec des comportements spécifiques pour les méthodes `create`, `findAndCount`, et d'autres, démontrant comment gérer à la fois les opérations réussies et les erreurs.
395+
396+
**Importance de l'ordre des valeurs retournées** : Il est crucial de comprendre que l'ordre des valeurs retournées dans l'exemple a une importance significative car il correspondra à l'ordre des appels dans les tests. Cela signifie que le comportement simulé pour le premier appel sera le premier dans la liste, et ainsi de suite, permettant une simulation précise des scénarios de test.
397+
398+
399+
349400
## Références supplémentaires
350401
Cette documentation couvre l'essentiel des tests des services NestJS en utilisant Jest. Pour plus d'informations détaillées, référez-vous à la documentation de Jest et NestJS.
351402
- [Tests NestJS](https://docs.nestjs.com/fundamentals/testing)

src/management/identities/identities.controller.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { FilterOptions } from '@streamkits/nestjs_module_scrud';
22
import { Test, TestingModule } from '@nestjs/testing';
33
import { IdentitiesController } from './identities.controller';
44
import { IdentitiesService } from './identities.service';
5-
import { Identities, IdentitiesDocument, IdentitiesSchema } from './_schemas/identities.schema';
5+
import { Identities, IdentitiesSchema } from './_schemas/identities.schema';
66
import { HttpStatus } from '@nestjs/common';
7-
import { Model, ModifyResult, Query, Types } from 'mongoose';
7+
import { Model, Types } from 'mongoose';
88
import { Response } from 'express';
99
import { getModelToken } from '@nestjs/mongoose';
1010
import { IdentitiesDtoStub } from './_stubs/identities.dto.stub';

0 commit comments

Comments
 (0)