Me pregunto cómo escribir pruebas para su API. Bueno, puede usar que se puede usar para probar puntos finales HTTP. SuperTest, Antes de iniciar , creemos una API simple usando node + express. En Express, usemos la ruta que nos dieron para aprender la biblioteca . Este artículo no se enfoca en crear una API de descanso usando el marco express. SuperTest SuperTest Vayamos al archivo /routes/users.js y creemos algunos puntos finales. expreso = require('expreso'); enrutador = express.Router(); var var _/*** obtener todos los usuarios*/_router.get('/', (req, res, next) { res.json('todos los usuarios enviados');}); function return _/*** Obtener un usuario específico*/_router.get('/:id', (req, res, next) { (req.params.id === 'U001') { // solo para demostración res.json("usuario U001 encontrado");} res.status(404).json('usuario no encontrado');}); function if return return _/*** Agregue un usuario*/_router.post('/', (req, res, next) { content = req.body; (content.id) { //solo para la demostración res.status (201).json("usuario creado");} res.status(400).json('usuario no creado');}); function let if return return 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 relevantes para que sea fácil escribir pruebas unitarias más adelante. códigos de estado HTTP Ahora concentrémonos en escribir pruebas de API usando . Primero debe instalar la dependencia como devDependancy. SuperTest 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 en el nivel raíz del proyecto y creemos un archivo llamado Este archivo es el archivo donde escribimos las pruebas de la API. prueba apiTest.js. 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 . 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. http://localhost:3000/users _//del archivo de ruta users.js/*** obtener todos los usuarios*/_router.get('/', (req, res, next) { res.json('todos los usuarios enviados');}); function return Ok, cómo escribimos la prueba para esta ruta en apiTest.js usando supertest. //apiTest.js request = require('supertest'); aplicación = require('../aplicación'); const const //==================== prueba API de usuario ==================== _/*** Las pruebas obtienen todos los puntos finales de los usuarios*/_describe('GET /users', () {it('responder con json que contiene una lista de todos los usuarios', (done) {request(app).get( '/users').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);});}); function function Aquí se 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 () es para agrupar los casos de prueba mientras () 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. describe describe que () necesita el servidor HTTP, por lo que pasamos nuestra referencia de aplicación expresa. Luego en () especificamos el punto final de la ruta. Aquí estamos en la aplicación, por lo que podemos omitir part. Simplemente proporcione el punto final de la ruta. request get http://localhost:3000/ en () establecemos los atributos del encabezado HTTP. Luego, en (), verificamos los valores de retorno, incluidos los valores de encabezado y los valores del cuerpo. set expect 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 la prueba llamando a nuestra función de devolución de llamada. finalizamos 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 = require('supertest'); aplicación = require('../aplicación'); const const //==================== prueba API de usuario ==================== _/*** Las pruebas obtienen todos los puntos finales de los usuarios*/_describe('GET /users', () {it('responder con json que contiene una lista de todos los usuarios', (done) {request(app).get( '/users').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);});}); function function _/*** Las pruebas obtienen un punto final de usuario proporcionando un usuario existente*/_describe('GET /user/:id', () {it('responder con json que contiene un solo usuario', (hecho) {solicitud (app).get('/users/U001').set('Accept', 'application/json').expect('Content-Type', /json/).expect(200, done);}); }); function function _/*** Las pruebas obtienen un punto final de usuario proporcionando un usuario no existente*/_describe('GET /user/:id', () {it('responder con el usuario json no encontrado', (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) => { (err) done(err);done();});});}); function function if return _/*** Probando el punto final del usuario posterior*/_describe('POST /usuarios', () { data = {"id": "1","name": "dummy","contact": "dummy" ,"address": "dummy"}it('responder con 201 creado', (hecho) {solicitud (app).post('/usuarios').send(data).set('Accept', 'application/ json').expect('Content-Type', /json/).expect(201).end((err) => { (err) done(err);done();});}); }); función let function if return _/*** Probando el punto final del usuario posterior*/_describe('POST /usuarios', () { data = {//no id"name": "dummy","contact": "dummy","address" : "ficticio"}it('responder con 400 no creado', (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) => { (err) done(err);done( );});});}); función let función if return Si observa detenidamente el código en el archivo , 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. apiTest.js Si ejecuta este archivo de prueba usando finalmente verá un resultado como este. el comando de prueba npm, > 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 para obtener más conocimiento. https://github.com/visionmedia/supertest