'use strict'; var assert = require('assert'); var express = require('express'); var http = require('http'); var request = require('supertest'); var proxy = require('../'); var proxyTarget = require('../test/support/proxyTarget'); var aliases = ['forwardPath', 'forwardPathAsync', 'proxyReqPathResolver']; describe('resolveProxyReqPath', function () { var server; this.timeout(10000); before(function () { var handlers = [{ method: 'get', path: '/working', fn: function (req, res) { res.sendStatus(200); } }]; server = proxyTarget(12345, 100, handlers); }); after(function () { server.close(); }); aliases.forEach(function (alias) { describe('when author uses option ' + alias, function () { it('the proxy request path is the result of the function', function (done) { var app = express(); var opts = {}; opts[alias] = function () { return '/working'; }; app.use(proxy('localhost:12345', opts)); request(app) .get('/failing') .expect(200) .end(done); }); it('the ' + alias + ' method has access to request object', function (done) { var app = express(); app.use(proxy('localhost:12345', { forwardPath: function (req) { assert.ok(req instanceof http.IncomingMessage); return '/working'; } })); request(app) .get('/foobar') .expect(200) .end(done); }); }); }); });