I. Module JSDOC : générateur de documentation

Utile pour générer automatiquement la doc de son application.

Liens :

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 :

Pages HTML générées avec JSDoc

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 :

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 :

Exemple de sortie Mocha après lancement des tests

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"
  },
...

Node.js : Autres modules externes

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *