¿Cómo probar el module node.js que devuelve la function anónima?

Estoy escribiendo un pequeño middleware para la ruta de express.js, pero cuando llegué a la testing de unidad de este código me quedé, y no sé cómo probarlo correctamente usando mocha, sinon y chai.

Mi código de middleware tiene un punto de input como este:

const searchByQuerystring = require('./search-by-querystring'); const searchByMarker = require('./search-by-marker'); module.exports = (req, res, next) => { if (req.marker) { searchByMarker(req, res, next); } else if (req.query) { searchByQuerystring(req, res, next); } else { next(); } }; 

, y durante la testing unitaria me gustaría probar si se llamó al método searchByMarker o searchByQuerystring .

Así que empiezo escribiendo esta testing,

 it('Should call search by querystring if querystring is present', () => { const req = httpMocks.createRequest({ query: { value: 1000 } }), res = httpMocks.createResponse(), next = sandbox.spy(); searchIndex(req, res, next); sinon.assert.calledOnce(next); }); 

donde mi middleware debería usar searchByQuerystring para la request de process y me gustaría probarlo si se llamó al método searchByQuerystring , pero realmente no sé cómo hacerlo, tal vez debería escribir este código de alguna otra manera, realmente no lo hago Quiero usar bibliotecas como proxyquire .

Tal vez mi module está haciendo demasiado trabajo (de acuerdo con el Principio de Responsabilidad Individual), pero todo el middleware es para el object de búsqueda de compilation, donde al principio solo tengo que averiguar de qué lugar vendrán los parameters, así que pensé que era una buena idea ponga esta lógica al inicio del middleware, ¿y debería tener dos middlewares?

Por favor, para cualquier ayuda, sugerencias sobre esto.

One Solution collect form web for “¿Cómo probar el module node.js que devuelve la function anónima?”

Bien,

Así que poner esta publicación me ayuda a encontrar una solución. Reescribo mi punto de input de middleware, para que se vea así

 const searchRequestParser = require('./search-request-parser'); const search = require('../../../lib/search'); module.exports = (req, res, next) => { const searchRequest = searchRequestParser(req); if (searchRequest) { const searchCriteria = search(searchRequest.resourceToSearch); req.searchQuery = searchCriteria.buildQuery(searchRequest.queryParameters); } next(); }; 

Y testing

  it('Should call search by querystring if querystring is present', () => { const req = httpMocks.createRequest({ method: 'GET', params: { resourceToSearch: 'debts' }, query: { value: 1000 } }), res = httpMocks.createResponse(), next = sandbox.spy(); searchIndex(req, res, next); expect(req).to.have.a.property('searchQuery'); }); 

Entonces, los methods searchByMarker o searchByQuerystring desaparecen y se reemplazan por el método searchRequestParser con salida, luego process esta salida en código que, como se vio, se duplicó previamente en los methods searchByMarker o searchByQuerystring .

Gracias a los resultados de retorno de las funciones que utilicé, no tuve que centrarme en las funciones de burlar / subrayar.

  • Primeros pasos con Karma y Jasmine instalados - jasmine.Suite () requirió error
  • Angularjs promete no ser resuelto en la testing de unidad
  • Prueba si el elemento existe Vuejs, Karma, Mocha
  • Prueba de unidades de JavaScript e continuous integration 2011
  • Suite de testing de Mocha error al salir cuando intenta conectarse a la API
  • ¿Cómo me burlo de mi file de configuration para probar?
  • Cómo probar la forma angularjs?
  • Plugin de Mocha para Maven
  • ¿Cómo expandir el espacio de nombres javascript en múltiples files?
  • Ejecutar testings de unidades de JavaScript dentro de Visual Studio
  • Prueba de unidad Javascript - DOM Manipulation
  • Probando una Protable Angular con Jazmín
  • TypeScript: ¿Cómo se testing el código del lado del cliente?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.