Version: 2.2.0 (última)

Pruebas E2E & Autenticación

La última parte de este tutorial explica cómo escribir y ejecutar pruebas de lado a lado (end-to-end o e2e). El propósito de estas pruebas no es verificar que cada característica de cada componente funciona, sino comprobar que estos componentes funcionan correctamente juntos.

Las pruebas se encuentran en el directorio src/e2e/. El comando para ejecutarlas en desarrollo es npm run e2e. Las pruebas E2E generalmente utilizan la biblioteca supertest que proporciona una abstracción de alto nivel para probar HTTP.

Abra index.ts en src/e2e y sustituya su contenido.

// std
// The `assert` module provides a simple set of assertion tests.
import { ok } from 'assert';
// 3p
import { createApp } from '@foal/core';
import * as request from 'supertest';
import { getConnection } from 'typeorm';
// App
import { AppController } from '../app/app.controller';
import { User } from '../app/entities';
// Define a group of tests.
describe('The server', () => {
let app: any;
// Create the application and the connection to the database before running all the tests.
before(async () => {
app = await createApp(AppController);
});
// Close the database connection after running all the tests whether they succeed or failed.
after(() => getConnection().close());
// Define a nested group of tests.
describe('on GET /api/todos requests', () => {
it('should return a 401 status if the user did not signed in.', () => {
return request(app)
.get('/api/todos')
.expect(401);
});
it('should return a 200 status if the user did signed in.', async () => {
// Create a new user in the empty database.
const user = new User();
user.email = 'john@foalts.org';
await user.setPassword('john_password');
await getConnection().manager.save(user);
// Log the user in.
let cookie = '';
await request(app)
.post('/auth/login')
// Set the body of the request
.send({ email: 'john@foalts.org', password: 'john_password' })
// The response should have the status 302 (redirection)
.expect(302)
.then(data => {
// The response should set the authentication cookie for the next requests.
ok(Array.isArray(data.header['set-cookie']));
// Save the cookie to be able to use it in further requests.
cookie = data.header['set-cookie'][0];
});
// Test the /api/todos endpoint when the user has logged in.
return request(app)
.get('/api/todos')
// Send the authentication cookie.
.set('Cookie', cookie)
.expect(200);
});
});
});

Ahora ejecute las pruebas.

npm run e2e

La salida debería tener este aspecto:

Salida de las pruebas E2E

Enhorabuena, ¡ha llegado al final de este tutorial!