_ _ _ _ _____
| \ | | | | | |/ ____|
______| \| | ___ __| | ___ | | (___ ______
|______| . ` |/ _ \ / _` |/ _ \_ | |\___ \______|
| |\ | (_) | (_| | __/ |__| |____) |
|_| \_|\___/ \__,_|\___|\____/|_____/
Les tests unitaires nous permettent de vérifier que chaque partie du programme fonctionne et ainsi éviter une régression.
Mocha est un framework de tests, nous allons l'installer en global pour nous permettre de voir facilement nos règles dans le terminal, via :
npm install -g mocha
Pour notre projet nous allons tester les fonctions mais aussi l'accès à l'API, pour cela nous allons passer par une bibliothèque d'assertions. Nous allons installer en devDependencies chai
et `chai-http via :
npm install chai chai-http --save-dev
Nous allons faire un dossier test
à la racine de notre site et faire un fichier user.js
à l'intérieur.
Nous allons commencer par décrire ce que nous voulons tester :
'use strict';
process.env.NODE_ENV = 'test';
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../bin/www');
const should = chai.should();
chai.use(chaiHttp);
describe('Users', _ => {
it('should list all users on /users GET');
});
Nous allons devoir faire une petite modification sur notre fichier bin/www
en rajoutant à la fin du fichier un exports pour l'utiliser dans chai
via :
module.exports = app;
Puis nous allons lancer notre fichier via mocha :
mocha test/
Puis nous allons commencer à écrire ce que nous attendons de notre API :
'use strict';
process.env.NODE_ENV = 'test';
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../bin/www');
chai.use(chaiHttp);
describe('GET /users', _ => {
it('should list all users on /users GET', done => {
chai.request(server)
.get('/users')
.end(function (err, res) {
expect(res).to.have.status(200);
done();
});
});
});
Vous devriez avoir un résultat ressemblant à :
GET /users
GET /users 200 369.424 ms - 903
✓ should list all users on /users GET (397ms)
1 passing (422ms)
'use strict';
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../bin/www');
const should = chai.should();
chai.use(chaiHttp);
describe('GET /users ', _ => {
it('should list all users on /users GET', done => {
chai.request(server)
.get('/users')
.end(function (err, res) {
expect(res).to.have.status(200);
done();
});
});
});
describe('POST /users ', _ => {
it('it should NOT POST a user', done => {
const user = {};
chai.request(server)
.post('/users')
.send(user)
.end((err, res) => {
expect(res).to.have.status(200);
/*res.body.should.be.a('object');
res.body.user.should.have.property('name');
res.body.user.should.have.property('firstname');
res.body.user.should.have.property('email');
res.body.should.have.property('message').eql('User successfully added!');*/
done();
});
});
it('it should POST a user', done => {
const user = {
name: "Bob",
firstname: "Josh",
email: "bob.josh@aol.fr"
};
chai.request(server)
.post('/users')
.send(user)
.end((err, res) => {
expect(res).to.have.status(200);
/*res.body.should.be.a('object');
res.body.user.should.have.property('name');
res.body.user.should.have.property('firstname');
res.body.user.should.have.property('email');
res.body.should.have.property('message').eql('User successfully added!');*/
done();
});
});
});
La partie en commentaire montre qu'il est possible de récupérer le corps du texte renvoyé (ici un json).
pour simplifier nos tests nous allons rajouter une ligne pour les tests dans notre package.json :
"scripts": {
"start": "node ./bin/www",
"test": "mocha test/"
};
nous pouvons désormais lancer nos tests en faisant
npm test
Si vous souhaitez pousser le test d'API plus loin, vous pouvez regarder du côté de Frisby. Si vous souhaitez tester les différents éléments dans votre navigateur, regardez du côté de CasperJS
Pour plus de détails sur les tests avec Mocha/Chai je vous conseille l'artiche de Scotch.io.
Il est possible d'avoir des tests à chaque push sur Git grâce à l'intégration continue, plusieurs sites et programmes proposent ces solutions :
Le TDD est une technique de travail ou l'écriture des tests se fait avec l'écriture du code ; pour plus d'informations, je vous invite à lire ceci : Les tests unitaires.