unitarios test node framework before async javascript unit-testing node.js mocha

javascript - test - tdd mocha chai



Supertest servidor express personalizado en nodo (1)

Por favor sé amable conmigo. Soy nuevo en la codificación asíncrona y he sido lanzado de cabeza a un proyecto intensivo que utiliza un nodo para desarrollar y un servidor de API. Me encanta pero algunas cosas no vienen naturalmente.

Nuestro proyecto está construido utilizando Express JS. Tenemos un archivo, server.js, donde creamos una instancia de un servidor Express que a su vez crea una instancia de nuestro enrutador y así sucesivamente. Necesito la integración probar este servidor ahora (parcialmente) completo. Normalmente, lo que hago es desde la línea de comandos ejecutar ''% node server.js'' y luego usar solicitudes de Python o solicitudes de rizo y verificar las respuestas.

Ahora me han encargado la tarea de escribir una unidad y un paquete de prueba de integración para que podamos automatizar nuestras pruebas en el futuro. He estado usando mocha y ahora estoy tratando de usar supertest para las pruebas de integración. El problema es que supertest espera un objeto de servidor al que luego aplica pruebas, sin embargo, nuestro archivo que genera nuestro objeto de servidor no devuelve nada. No quiero modificar ese archivo, por lo que estoy perplejo en cuanto a cómo acceder al objeto del servidor para usarlo en las pruebas.

Mi archivo de servidor se ve (en parte) así:

var express = require(''express'') var app = express(); // Express Configuration app.use(express.favicon()); //handles favicon request, which keeps it out of the log when using a browser :) app.use(express.bodyParser()); //slurps up the body in chunks the node.js way :) // ...and so on

y mi archivo de prueba de moca se ve así

var request = require(''supertest'') , app = require(''../server.js'') , assert = require("assert"); describe(''POST /'', function(){ it(''should fail bad img_uri'', function(done){ request(app) .post(''/'') .send({ ''img_uri'' : ''foobar'' }) .expect(500) .end(function(err, res){ console.dir(err) console.dir(res) done(); }) }) })

cuando ejecuto esta prueba recibo una queja acerca de que el objeto de la aplicación no tiene un método llamado dirección. Mi pregunta es, ¿hay alguna forma en que pueda requerir / llamar al archivo server.js para que el objeto de la aplicación esté dentro del alcance? O voy por este mal También jugué un poco con el uso de http.js para hacer llamadas directamente al servidor, pero tampoco tuve suerte de esa manera. ¡Gracias!


Necesitas exportar el objeto de la app en server.js :

var app = express(); module.exports = app; ...