Webux Lab

Par Studio Webux

Jest

TG
Tommy Gingras Studio Webux S.E.N.C 2021-04-15

Introduction

Cet outil permet d’écrire et de lancer les tests avec NodeJS.

J’utilise Jest pour sa simplicité et la documentation qui est fournie. Je n’ai pas d’opinion à savoir si une autre solution est “meilleur/équivalent”.

Je recommande la lecture de la documentation officielle pour connaitre les fonctions disponibles pour écrire les tests Documentation Jest

Cet article va couvrir seulement la partie infrastructure.

Comment intégrer cet outil

Pour chacun de vos modules,

Installer les dépendances

Il est très important de lancer la commande en utilisant le --save-dev pour seulement installer les packages suivant en mode développement. C’est important pour des raisons d’optimisation et de sécurité.

npm install --save-dev jest dotenv

ou

npm i -D jest dotenv

Le package dotenv est installé pour bénéficier de l’usage des .env Je vous invite à lire sur ce package pour en apprendre plus.

Mise à jour du package.json

package.json
{
  "name": "@webuxlab/package-name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "lint": "eslint *.js",
    "test": "jest",
  },
  "author": "Studio Webux",
  "license": "ISC",
  "dependencies": {},
  "peerDependencies": {},
  "devDependencies": {
      "dotenv" : "^8.2.0",
      "jest": "^26.6.3"
  }

Les tests

Il y a plusieurs façons de pour créer le répertoire de tests, J’aime bien le __tests__

Donc, pour commencer créer le répertoire __tests__ pour conserver tous les tests.

Un exemple de test : todo

Pour plus d’exemples par rapport à l’écriture des tests, je vous recommande la documentation officielle.

__tests__/index.spec.js
require('dotenv').config({
  path: `${__dirname}/../../.env.${process.env.NODE_ENV}`
});

describe('Un test à écrire', () => {
  it.todo(
    `affiche le contenu de la variable d'environnement : ${process.env.NODE_ENV}`
  );
});

Avec cette approche vous pouvez très facilement charger une configuration en utilisant la variable d’environnement NODE_ENV.

De plus, pour faciliter le déploiement du code source je recommande l’usage des variables d’environnements. Par exemple, le nom de la base de données, le nom des secrets (si vous avez un secret manager) et toute autre valeur “hardcoded” devraient avoir une variable d’environnement.

Prenez note qu’il est TRÈS important de ne jamais sauvegarder d’information privée, telle que les mot de passes, clé d’accès, tokens, JWT et tout autre dans un répertoire. même si celui-ci est privé ou derrière un VPN ou dans une forteresse. Il est donc important de bien configurer le .gitignore pour éviter de sauvegarder cette information par erreur.

.gitignore

node_modules/
.env*

.env.*

Lorsque vous aller utiliser le serveur CI/CD (Jenkins, Github Actions, CodePipeline ou autres) il est important d’utiliser les outils offerts par ceux-ci pour s’assurer de partager les informations sensibles entre la plateforme et votre code de façon sécuritaire grâce aux variables d’environnements.

DB_NAME="test-db"
DB_USERNAME="user"
DB_PASSWORD="password"
DB_PORT="1234"
API_ENDPOINT="https://webuxlab.com/api/"
Structure
Structure proposée
projet/
    .gitignore
    module1/
        __tests__/
            index.spec.js
        src/
            helper.js
        index.js
        package.json
    .env.test
    .env.development
    .env.production
    package.json

L’auto complete avec VSCode

Dans chacun de vos modules, lancez la commande suivante:

npm install --save-dev @types/jest

Puis à la racine de votre projet créer/modifier le fichier jsconfig.json,

{
  "typeAcquisition": {
    "include": ["jest"]
  }
}

Il faut recharger VSCode et par la suite, l’autocomplete va fonctionner lors de l’écriture de vos tests

Conclusion

Les tests ne sont pas toujours faciles à lancer et à maintenir, par contre ceux-ci sont très importants pour assurer un bon fonctionnement de l’application et permettre de réduire le risque d’exposer le code à des failles ou à des pannes.

La sécurité doit être considérée et plusieurs pratiques doivent être appliquées pour s’assurer de tester le tout de la bonne façon.

Dans un autre article, la partie d’automatisation sera couverte.


Recherche