Introduction aux tests NestJS
Les tests de fonctionnalité (tests d'intégration) se trouvent sous le dossier test.
Test de base déjà présent
L'application vient avec un test de base pour tester AppController.
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';
describe('AppController (e2e)', () => {
let app: INestApplication;
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
});
Anatomie d'un test
Comme vous pouvez remarquer, un test NestJS est très similaire à un test Angular!
La fonction describe est utilisée pour regrouper les tests appartenant au même groupe (ex.: contrôleur).
La fonction beforeEach est exécutée avant chaque test. Dans le cas plus haut, elle initialise l'application à partir de AppModule, soit le module à la racine de l'application. Une fonction similaire, beforeAll existe aussi afin d'exécuter des tâches avant que les tests soient exécutés.
Ensuite, on crée des cas de test en appelant la fonction it().
Finalement, les lignes expect sont utilisées pour tester que le retour correspond bien à ce qui est attendu (code 200, contenu Hello World, par exemple).
Exécuter les tests
npm run test:e2e
Si vous obtenez l'erreur Jest did not exit one second after the test run has completed., ajoutez la ligne suivante au fichier de test (await app.close()):
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
afterAll(async () => {
await app.close();
});
Vous pourrez voir le résultat des tests dans la console.
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.338 s
Ran all test suites.