¿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.

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.