I. Module JSDOC : générateur de documentation
Utile pour générer automatiquement la doc de son application.
Liens :
- lien officiel : https://jsdoc.app/ ;
- tuto rapide : https://www.valentinog.com/blog/jsdoc/ ;
- pluggin « sublimetext » qui prend en charge l’annotation de commentaires : http://20tauri.free.fr/DoxyDoxygen/ ;
- génère automatiquement les paramètres…
A installer avec l’option dev sous npm :
npm install jsdoc --save-dev
A intégrer dans les scripts de npm pour générer plus simplement la doc … : voir partie « Script »
{
"name": "test7_msql2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified...\" && exit 1",
"doc" : "node_modules/.bin/jsdoc . README.md"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"ejs": "^3.1.5",
"express": "^4.17.1",
"mongodb": "^3.6.0",
"mysql2": "^2.1.0",
"path": "^0.12.7"
},
"devDependencies": {
"jsdoc": "^3.6.5"
}
}
Commande NPM pour générer la doc :
npm run-script doc
Exemple de sortie dans le répertoire ‘out’ local :

II Modules « Assert » et « Mocha » : tests unitaires et qualité logicielle
Le module Assert permet de faire des tests unitaires. Le module MOCHA permet quant à lui d’organiser et de définir une logique de tests. C’est ce dernier module qui va permettre d’obtenir des séries de tests lisibles et pratiques pour la qualité logicielle.
Liens utiles :
- doc officielles :
- module ASSERT de node.js : https://nodejs.org/api/assert.html
- module MOCHA : https://mochajs.org/
- tutos :
Exemple d’un fichier de test :
const gpeec = require('./index_mocha_classe');
const assert = require('assert').strict;
describe("Test intégration classes", function() {
// Création d'une personne
let une_personne = new gpeec.Personne()
// Création de compétences
let une_competence = new gpeec.Competence(1,"test de libelle","test comment",0)
let une_competence2 = new gpeec.Competence(2,"test2","test comment2,0")
it("Vérification ajout 2 compétences pour une personne", function() {
une_personne.ajouter_competence(une_competence2)
une_personne.ajouter_competence(une_competence)
// Vérif nombre de competence au total
assert.strictEqual(une_personne.get_nb_competence(), 2);
});
it("Vérification suppression d'une competence (nb et libelle restant)", ()=> {
let nb_competence_avant = une_personne.get_nb_competence()
// suppression de la competence 2
une_personne.enlever_competence(une_competence2)
let nb_competence_apres = une_personne.get_nb_competence()
// Vérif nombre restant
assert.strictEqual(nb_competence_avant,nb_competence_apres+1 )
// Vérif le libellé de la competence restante
assert.strictEqual(une_competence.libelle, une_personne.liste_competence[0].libelle)
})
});
Avec les classes suivantes (index_mocha_classe) :
class Competence {
id = 0
libelle = ""
commentaire = ""
type = 0
constructor(id,libelle,commentaire,type) {
this.id = id;
this.libelle = libelle
this.commentaire = commentaire
this.type = type
}
}
class Personne {
constructor () {
this.liste_competence = []
}
ajouter_competence(une_competence) {
this.liste_competence.push(une_competence)
}
enlever_competence(une_competence) {
let index = 0;
this.liste_competence.forEach( competence_encours=> {
if (competence_encours.id === une_competence.id) {
this.liste_competence.splice(index,1)
}
index ++
})
}
get_nb_competence () {
return this.liste_competence.length
}
}
module.exports.Personne = Personne
module.exports.Competence = Competence
Ce qui donne le résultat suivant :

A noter :
- une manière de faire légèrement différente pour du code asynchrone ;
- utilisation de la fonction done(err) pour indiquer à Mocha quand le traitement est terminé ;
- idem pour les promesses : voir dans la doc pour le détail ;
- pour les asserts, retenir les méthodes principales suivantes :
- assert.strictEqual() : vérifie une égalité ;
- assert.notStrictEqual() : vérifie une inégalité ;
- assert.throws() : vérifie une levée d’exception ;
- assert.deepStrictEqual() : vérifie une égalité d’ensemble de données ;
- assert.notDeepStrictEqual() : vérifie une inégalité d’un ensemble de données ;
- assert.ok() : force un test valide ;
- assert.fail() : force un test invalide.
Enfin, ne pas hésiter à intégrer MOCHA dans le projet NPM local pour le lancement des tests :
{
"name": "test7_msql2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "node_modules/.bin/mocha index_mocha.test.js",
"doc": "node_modules/.bin/jsdoc . README.md"
},
...