NodeJS / Express
Tengo un método dentro de un controlador que llama a una API externa a través de un servicio POST. Este método utiliza HystrixJS entre entonces para realizar la llamada.
request.js
... const post = (url, req, res, xsd, body = {}) => { // ... simple execute the post method and return a promisse return client.postPromise(url, options).then((response) => (response)); }; ... controller.js
const { post } = require('./services/request'); function Xpto(req, res, xsd) { let url = `http://host.io/post-method`; const request = req.app.get('hystrix').hystrixRequestHandler(post, 'blablabla'); const inRequest = req.body; const inResponse = request.execute( url, req, res, xsd, inRequest, ); return inResponse; } // ----------------------------------- function handler(req, res, next) { const response = await Xpto( req, res, xsd ); console.log('================>', response); } Prueba de los services/request de simulación de controller.js para evitar una llamada API en vivo.
controller.test.js
... it('should return success', async () => { mock01 = proxyquire("./controller", { "./services/request": { post: () => Promise.resolve({ response: { statusCode: 200 }, data: { xxx: "00000", }, }), }, }); const response = await mock01.handler(request, res, next); const data = response.body[0].data; expect(response.statusCode).to.equal(200); }); ... it('should return error', async () => { mock02 = proxyquire("./controller", { "./services/request": { post: () => Promise.resolve({ response: { statusCode: 500 }, data: { zzzz: "99999", }, }), }, }); const response = await mock02.handler(request, res, next); const data = response.body[0].data; expect(response.statusCode).to.equal(500); }); Todo funciona bien, excepto que debido a la memoria caché de Hystrix, siempre devuelve statusCode = 200 , incluso en el mock2 , donde lo defino explícitamente para devolver el código de statusCode = 500 .
AssertionError: expected 200 to equal 500 + expected - actual -200 +500 Estoy buscando una manera de simular la const request = req.app.get('hystrix').hystrixRequestHandler(post, 'blablabla'); u otra forma de evitar este comportamiento.