'use strict'; var assert = require('assert'); var express = require('express'); var request = require('supertest'); var proxy = require('../'); describe('when server responds with an error', function () { this.timeout(10000); var app; var slowTarget; var serverReference; beforeEach(function () { app = express(); }); afterEach(function () { serverReference.close(); }); var STATUS_CODES = [ { code: 403, text: 'Forbidden', toString: 'Error: cannot GET /proxy (403)' }, { code: 404, text: 'Not Found', toString: 'Error: cannot GET /proxy (404)' }, { code: 500, text: 'Internal Server Error', toString: 'Error: cannot GET /proxy (500)' } ]; STATUS_CODES.forEach(function (statusCode) { it('express-http-proxy responds with ' + statusCode.text + 'when proxy server responds ' + statusCode.code, function (done) { slowTarget = express(); slowTarget.use(function (req, res) { res.sendStatus(statusCode.code); }); serverReference = slowTarget.listen(12345); app.use('/proxy', proxy('http://127.0.0.1:12345', { reqAsBuffer: true, reqBodyEncoding: null, parseReqBody: false })); request(app) .get('/proxy') .expect(statusCode.code) .end(function (err, res) { assert(err === null); assert(res.error); assert(res.error.text === statusCode.text); assert(res.error.toString() === statusCode.toString); done(); }); }); }); });