* L’environnement de test comprend`sakila`exemple de base de données et toute modification apportée à celle-ci par un test est annulée avant l’exécution d’autres tests.
* Lors de l’exécution de tests unitaires, il essaie de se connecter au serveur MySQL exécuté sur`localhost:3306`avec nom d’utilisateur`root`et mot de passe`password`(qui peut être configuré) et s’il n’est pas trouvé, il utilisera`sqlite`comme solution de secours, donc aucune exigence d’un serveur SQL pour exécuter des tests.
* Utilisez des usines pour créer/mettre à jour/supprimer des données. Aucune donnée ne doit être directement créée/mise à jour/supprimée dans le test.
* Lors de l'écriture d'une usine, assurez-vous qu'elle peut être utilisée avec le moins de paramètres possible et utilisez les valeurs par défaut pour les autres paramètres.
* Utilisez des paramètres nommés pour les usines.
```ts
createUser({ email, password})
```
* Utilisez un fichier par usine.
### Procédure pas à pas pour l'écriture d'un test unitaire
Nous allons configurer`beforeEach`qui est appelé avant l’exécution de chaque test. Nous utiliserons`init`fonction de`nocodb/packages/nocodb/tests/unit/init/index.ts`, qui est une fonction d'assistance qui configure l'environnement de test (c'est-à-dire la réinitialisation de l'état, etc.).
`init`fait les choses suivantes -
* Il initialise un`Noco`instance (réutilisée dans tous les tests).
* Restaure`meta`et`sakila`base de données à son état initial.
* Crée l'utilisateur root.
* Retour`context`qui a`auth token`pour l'utilisateur créé, instance de serveur de nœud (`app`), et`dbConfig`.
Nous utiliserons`createProject`et`createProject`usines pour créer un projet et une table.
```typescript
let context;
beforeEach(async function () {
context = await init();
project = await createProject(context);
table = await createTable(context, project);
});
```
#### Cas de test
Nous utiliserons`it`fonction pour créer un scénario de test. Nous utiliserons`supertest`pour faire une requête au serveur. Nous utilisons`expect`(`chai`) pour affirmer la réponse.
Nous pouvons alors importer le`Table`suite de tests pour`Rest`suite de tests dans`packages/nocodb/tests/unit/rest/index.test.ts`déposer(`Rest`la suite de tests est importée dans le fichier racine de la suite de tests qui est`packages/nocodb/tests/unit/index.test.ts`).
### Base de données d'échantillons d'ensemencement (Sakila)