From e7473612694d68a709e64ddfeee427fdd282a3a6 Mon Sep 17 00:00:00 2001 From: SID-CJ <133585995+SID-CJ@users.noreply.github.com> Date: Thu, 4 Apr 2024 03:44:54 +0530 Subject: [PATCH 1/8] Update fr-040.unit-testing.md --- .../fr/150.engineering/fr-040.unit-testing.md | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index e69de29bb2..893c453390 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -0,0 +1,191 @@ +*** + +titre : "Écrire des tests unitaires" +description: "Présentation des tests unitaires" +balises : \['Ingénierie'] +------------------------- + +## Tests unitaires + +* Tous les tests unitaires individuels sont indépendants les uns des autres. Nous n'utilisons aucun état partagé entre les tests. +* 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. + +### Conditions préalables + +* MySQL est préférable - mais les tests peuvent également s'appuyer sur SQLite + +### Installation + +```bash +pnpm --filter=-nocodb install + +# add a .env file +cp tests/unit/.env.sample tests/unit/.env + +# open .env file +open tests/unit/.env +``` + +Configurez les variables suivantes + +> DB\_HOST : hôte +> DB\_PORT : port +> DB\_USER : nom d'utilisateur +> DB\_PASSWORD : mot de passe + +### Exécuter des tests + +```bash +pnpm run test:unit +``` + +### Structure des dossiers + +Le dossier racine des tests unitaires est`packages/nocodb/tests/unit` + +* `rest`Le dossier contient toutes les suites de tests pour les API restantes. +* `model`Le dossier contient toutes les suites de tests pour les modèles. +* `factory`Le dossier contient toutes les fonctions d’aide pour créer des données de test. +* `init`Le dossier contient des fonctions d'assistance pour configurer l'environnement de test. +* `index.test.ts`est le fichier racine de la suite de tests qui importe toutes les suites de tests. +* `TestDbMngr.ts`est une classe d'assistance pour gérer les bases de données de test (c'est-à-dire la création, la suppression, etc.). + +### Modèle d'usine + +* 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 créer un`Table`suite de tests à titre d'exemple. + +#### Configurer le test + +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. + +```typescript +it('Get table list', async function () { + const response = await request(context.app) + .get(`/api/v1/db/meta/projects/${project.id}/tables`) + .set('xc-auth', context.token) + .send({}) + .expect(200); + + expect(response.body.list).to.be.an('array').not.empty; +}); +``` + +:::Info + +We can also run individual test by using `.only`dans`describe`ou`it`fonction et l’exécution de la commande test. + +::: + +```typescript +it.only('Get table list', async () => { +``` + +#### Intégration de la nouvelle suite de tests + +Nous créons un nouveau fichier`table.test.ts`dans`packages/nocodb/tests/unit/rest/tests`annuaire. + +```typescript +import 'mocha'; +import request from 'supertest'; +import init from '../../init'; +import { createTable, getAllTables } from '../../factory/table'; +import { createProject } from '../../factory/project'; +import { defaultColumns } from '../../factory/column'; +import Model from '../../../../src/lib/models/Model'; +import { expect } from 'chai'; + +function tableTest() { + let context; + let project; + let table; + + beforeEach(async function () { + context = await init(); + + project = await createProject(context); + table = await createTable(context, project); + }); + + it('Get table list', async function () { + const response = await request(context.app) + .get(`/api/v1/db/meta/projects/${project.id}/tables`) + .set('xc-auth', context.token) + .send({}) + .expect(200); + + expect(response.body.list).to.be.an('array').not.empty; + }); +} + +export default function () { + describe('Table', tableTests); +} +``` + +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) + +```typescript + +function tableTest() { + let context; + let sakilaProject: Project; + let customerTable: Model; + + beforeEach(async function () { + context = await init(); + + /******* Start : Seeding sample database **********/ + sakilaProject = await createSakilaProject(context); + /******* End : Seeding sample database **********/ + + customerTable = await getTable({project: sakilaProject, name: 'customer'}) + }); + + it('Get table data list', async function () { + const response = await request(context.app) + .get(`/api/v1/db/data/noco/${sakilaProject.id}/${customerTable.id}`) + .set('xc-auth', context.token) + .send({}) + .expect(200); + + expect(response.body.list[0]['FirstName']).to.equal('MARY'); + }); +} +``` From f6ac700b2d22b6802d5706528fbab4156a207ebc Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:11 +0530 Subject: [PATCH 2/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index 893c453390..1db8217ec7 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -8,7 +8,7 @@ balises : \['Ingénierie'] ## Tests unitaires * Tous les tests unitaires individuels sont indépendants les uns des autres. Nous n'utilisons aucun état partagé entre les tests. -* 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. +* 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. ### Conditions préalables From 1fad267b92b67706677a370128ec81b0c2576359 Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:18 +0530 Subject: [PATCH 3/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index 1db8217ec7..50ace17357 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -9,7 +9,7 @@ balises : \['Ingénierie'] * Tous les tests unitaires individuels sont indépendants les uns des autres. Nous n'utilisons aucun état partagé entre les tests. * 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. +* 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. ### Conditions préalables From 3c2c2c461047b886807416880bc997e8ecf06bc9 Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:26 +0530 Subject: [PATCH 4/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index 50ace17357..aa28ca6fb4 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -13,7 +13,7 @@ balises : \['Ingénierie'] ### Conditions préalables -* MySQL est préférable - mais les tests peuvent également s'appuyer sur SQLite +* MySQL est préférable, mais les tests peuvent également s’appuyer sur SQLite ### Installation From 36b8968931cedd3a5848aee9e780e89a3410897f Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:33 +0530 Subject: [PATCH 5/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index aa28ca6fb4..4d91d1f359 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -45,8 +45,9 @@ pnpm run test:unit Le dossier racine des tests unitaires est`packages/nocodb/tests/unit` * `rest`Le dossier contient toutes les suites de tests pour les API restantes. -* `model`Le dossier contient toutes les suites de tests pour les modèles. -* `factory`Le dossier contient toutes les fonctions d’aide pour créer des données de test. +* Le dossier `rest` contient toutes les suites de tests pour les API restantes. +* Le dossier `model` contient toutes les suites de tests pour les modèles. +* Le dossier `factory` contient toutes les fonctions d’aide pour créer des données de test. * `init`Le dossier contient des fonctions d'assistance pour configurer l'environnement de test. * `index.test.ts`est le fichier racine de la suite de tests qui importe toutes les suites de tests. * `TestDbMngr.ts`est une classe d'assistance pour gérer les bases de données de test (c'est-à-dire la création, la suppression, etc.). From 85d4fe9a25795b3fc253f7493ed793263d3df1f4 Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:42 +0530 Subject: [PATCH 6/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index 4d91d1f359..e74c079371 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -49,7 +49,7 @@ Le dossier racine des tests unitaires est`packages/nocodb/tests/unit` * Le dossier `model` contient toutes les suites de tests pour les modèles. * Le dossier `factory` contient toutes les fonctions d’aide pour créer des données de test. * `init`Le dossier contient des fonctions d'assistance pour configurer l'environnement de test. -* `index.test.ts`est le fichier racine de la suite de tests qui importe toutes les suites de tests. +* `index.test.ts` est le fichier racine de la suite de tests et importe toutes les suites de tests. * `TestDbMngr.ts`est une classe d'assistance pour gérer les bases de données de test (c'est-à-dire la création, la suppression, etc.). ### Modèle d'usine From ef84012db999d5f7615307e177662b6c436288b0 Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:50 +0530 Subject: [PATCH 7/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index e74c079371..ff85f42e34 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -50,7 +50,7 @@ Le dossier racine des tests unitaires est`packages/nocodb/tests/unit` * Le dossier `factory` contient toutes les fonctions d’aide pour créer des données de test. * `init`Le dossier contient des fonctions d'assistance pour configurer l'environnement de test. * `index.test.ts` est le fichier racine de la suite de tests et importe toutes les suites de tests. -* `TestDbMngr.ts`est une classe d'assistance pour gérer les bases de données de test (c'est-à-dire la création, la suppression, etc.). +* `TestDbMngr.ts` est une classe d'assistance pour gérer les bases de données de test (c'est-à-dire la création, la suppression, etc.). ### Modèle d'usine From c48b003d2559cfacd44f31910c226ae3bd6f22dd Mon Sep 17 00:00:00 2001 From: Anbarasu Date: Mon, 8 Apr 2024 19:42:57 +0530 Subject: [PATCH 8/8] Update scripts/docs/fr/150.engineering/fr-040.unit-testing.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- scripts/docs/fr/150.engineering/fr-040.unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md index ff85f42e34..5eaa98d9fd 100644 --- a/scripts/docs/fr/150.engineering/fr-040.unit-testing.md +++ b/scripts/docs/fr/150.engineering/fr-040.unit-testing.md @@ -64,7 +64,7 @@ Le dossier racine des tests unitaires est`packages/nocodb/tests/unit` ### Procédure pas à pas pour l'écriture d'un test unitaire -Nous allons créer un`Table`suite de tests à titre d'exemple. +Nous allons créer un`Table` suite de tests à titre d’exemple. #### Configurer le test