Me pregunto cómo escribir pruebas para su API. Bueno, puede usar SuperTest, que se puede usar para probar puntos finales HTTP.
Antes de iniciar SuperTest , creemos una API simple usando node + express. En Express, usemos la ruta que nos dieron para aprender la biblioteca SuperTest . Este artículo no se enfoca en crear una API de descanso usando el marco express.
Vayamos al archivo /routes/users.js y creemos algunos puntos finales.
var expreso = require('expreso'); var enrutador = express.Router();
_/*** obtener todos los usuarios*/_router.get('/', function (req, res, next) { return res.json('todos los usuarios enviados');});
_/*** Obtener un usuario específico*/_router.get('/:id', function (req, res, next) { if (req.params.id === 'U001') { // solo para demostración return res.json("usuario U001 encontrado");} return res.status(404).json('usuario no encontrado');});
_/*** Agregue un usuario*/_router.post('/', function (req, res, next) { let content = req.body; if (content.id) { //solo para la demostración return res.status (201).json("usuario creado");} return res.status(400).json('usuario no creado');});
módulo.exportaciones = enrutador;
He creado dos métodos de obtención simples para obtener datos de usuario y un método de publicación para guardar un usuario. LOL, estaba bromeando, no hay una integración real de la base de datos o una función de guardado, solo se envían algunos resultados JSON basados en una lógica ficticia 😹 y códigos de estado para probar nuestra API. Puede crear una API de trabajo real. Pero recuerde enviar códigos de estado HTTP relevantes para que sea fácil escribir pruebas unitarias más adelante.
Ahora concentrémonos en escribir pruebas de API usando SuperTest . Primero debe instalar la dependencia como devDependancy.
npm install supertest --save-dev
Esto también incluirá mocha porque la superprueba usa el marco de prueba de mocha. Pero no necesita instalarlo, viene con supertest .
Luego, creemos un directorio llamado prueba en el nivel raíz del proyecto y creemos un archivo llamado apiTest.js. Este archivo es el archivo donde escribimos las pruebas de la API.
Lo primero que necesitamos es el módulo supertest.
//apiTest.jsconst request = require('supertest');
Luego necesitamos pasar el http.Server al método request() de supertest. Para hacer eso, incluyamos nuestra aplicación express de la siguiente manera.
//apiTest.jsconst request = require('supertest');const app = require('../app'); //referencia a su archivo app.js
Escribamos la primera prueba de API para probar el punto final http://localhost:3000/users . Si este punto final funciona correctamente, debería devolver el código de estado 200. Así es como se implementa el archivo de ruta del usuario. Consulte el siguiente código res.json() establecerá automáticamente el código de estado 200. Así que no se preocupe.
_//del archivo de ruta users.js/*** obtener todos los usuarios*/_router.get('/', function (req, res, next) { return res.json('todos los usuarios enviados');});
Ok, cómo escribimos la prueba para esta ruta en apiTest.js usando supertest.
//apiTest.js const request = require('supertest'); const aplicación = require('../aplicación');
//==================== prueba API de usuario ====================
_/*** Las pruebas obtienen todos los puntos finales de los usuarios*/_describe('GET /users', function () {it('responder con json que contiene una lista de todos los usuarios', function (done) {request(app).get( '/users').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);});});
Aquí se describe el método que proviene del marco de prueba de mocha. Simplemente especificamos el nombre del punto final como primer argumento y luego la función para escribir el caso de prueba. Aquí Mocha describe () es para agrupar los casos de prueba mientras que () se usa para escribir los casos de prueba reales. Damos una descripción simple de lo que vamos a probar como primer argumento en la función it(). Luego, la función de devolución de llamada a llamar.
request () necesita el servidor HTTP, por lo que pasamos nuestra referencia de aplicación expresa. Luego en get () especificamos el punto final de la ruta. Aquí estamos en la aplicación, por lo que podemos omitir http://localhost:3000/ part. Simplemente proporcione el punto final de la ruta.
en set () establecemos los atributos del encabezado HTTP. Luego, en expect (), verificamos los valores de retorno, incluidos los valores de encabezado y los valores del cuerpo.
En este ejemplo, verificamos si el tipo de contenido devuelto es JSON. Porque enviamos la respuesta como JSON usando el método res.json(). Luego, esperar (200) es verificar que el código de estado devuelto sea igual a 200. Luego finalizamos la prueba llamando a nuestra función de devolución de llamada.
Correcto hasta ahora todo bien. Pero, ¿cómo podemos ejecutar estas pruebas? Bueno, debe usar este cambio en su archivo package.json .
"scripts": {"start": "node ./bin/www","test": "mocha 'test/apiTest.js'" //ruta a su archivo de prueba}
Ahora puede ejecutar los casos de prueba simplemente usando
> prueba npm
Después de ejecutar el archivo de prueba, verá este resultado.
> moca 'prueba/apiTest.js'
GET /usersGET /users 200 5.289 ms - 16 ✓ responde con json que contiene una lista de todos los usuarios
1 pase (38ms)
Sigamos escribiendo más casos de prueba de todos los puntos finales en el archivo users.js.
solicitud const = require('supertest'); const aplicación = require('../aplicación');
//==================== prueba API de usuario ====================
_/*** Las pruebas obtienen todos los puntos finales de los usuarios*/_describe('GET /users', function () {it('responder con json que contiene una lista de todos los usuarios', function (done) {request(app).get( '/users').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);});});
_/*** Las pruebas obtienen un punto final de usuario proporcionando un usuario existente*/_describe('GET /user/:id', function () {it('responder con json que contiene un solo usuario', function (hecho) {solicitud (app).get('/users/U001').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);}); });
_/*** Las pruebas obtienen un punto final de usuario proporcionando un usuario no existente*/_describe('GET /user/:id', function () {it('responder con el usuario json no encontrado', function (hecho) { request(app).get('/users/idisnonexisting').set('Accept', 'application/json').expect('Content-Type', /json/).expect(404) //esperando estado HTTP code.expect('"user not found"') // esperando el valor del contenido.end((err) => { if (err) return done(err);done();});});});
_/*** Probando el punto final del usuario posterior*/_describe('POST /usuarios', función () { let data = {"id": "1","name": "dummy","contact": "dummy" ,"address": "dummy"}it('responder con 201 creado', function (hecho) {solicitud (app).post('/usuarios').send(data).set('Accept', 'application/ json').expect('Content-Type', /json/).expect(201).end((err) => { if (err) return done(err);done();});}); });
_/*** Probando el punto final del usuario posterior*/_describe('POST /usuarios', función () { let data = {//no id"name": "dummy","contact": "dummy","address" : "ficticio"}it('responder con 400 no creado', función (hecho) {solicitud(aplicación).post('/usuarios').send(datos).set('Aceptar', 'aplicación/json') .expect('Content-Type', /json/).expect(400).expect('"usuario no creado"').end((err) => { if (err) return done(err);done( );});});});
Si observa detenidamente el código en el archivo apiTest.js , obtendrá el ritmo. Solo he mostrado los métodos GET y POST, pero puede probar los métodos PUT y DELETE con una API de trabajo real.
Si ejecuta este archivo de prueba usando el comando de prueba npm, finalmente verá un resultado como este.
> mocha 'test/apiTest.js'GET /usersGET /users 200 5.610 ms - 16✓ responder con json que contiene una lista de todos los usuarios
GET /user/:idGET /users/U001 200 0.870 ms - 17 ✓ responde con json que contiene un solo usuario
GET /user/:idGET /users/idisnonexisting 404 0.458 ms - 16 ✓ responder con usuario json no encontrado
POST /usersPOST /users 201 10.196 ms - 14 ✓ responde con 201 creado
POST /usersPOST /users 400 0.607 ms - 18 ✓ responde con 400 no creado
5 pases (62ms)
Es mejor consultar https://github.com/visionmedia/supertest para obtener más conocimiento.