mirror of
https://gitee.com/java110/MicroCommunityWeb.git
synced 2026-02-25 06:09:11 +08:00
117 lines
3.3 KiB
JavaScript
117 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
var assert = require('assert');
|
|
var ScopeContainer = require('../lib/scopeContainer');
|
|
var resolveProxyReqPath = require('../app/steps/resolveProxyReqPath');
|
|
var expect = require('chai').expect;
|
|
var express = require('express');
|
|
var request = require('supertest');
|
|
var proxy = require('../');
|
|
|
|
|
|
describe('resolveProxyReqPath', function () {
|
|
var container;
|
|
|
|
beforeEach(function () {
|
|
container = new ScopeContainer();
|
|
});
|
|
|
|
var tests = [
|
|
{
|
|
resolverType: 'undefined',
|
|
resolverFn: undefined,
|
|
data: [
|
|
{ url: 'http://localhost:12345', parsed: '/' },
|
|
{ url: 'http://g.com/123?45=67', parsed: '/123?45=67' }
|
|
]
|
|
},
|
|
{
|
|
resolverType: 'a syncronous function',
|
|
resolverFn: function () { return 'the craziest thing'; },
|
|
data: [
|
|
{ url: 'http://localhost:12345', parsed: 'the craziest thing' },
|
|
{ url: 'http://g.com/123?45=67', parsed: 'the craziest thing' }
|
|
]
|
|
},
|
|
{
|
|
resolverType: 'a Promise',
|
|
resolverFn: function () {
|
|
return new Promise(function (resolve) {
|
|
resolve('the craziest think');
|
|
});
|
|
},
|
|
data: [
|
|
{ url: 'http://localhost:12345', parsed: 'the craziest think' },
|
|
{ url: 'http://g.com/123?45=67', parsed: 'the craziest think' }
|
|
]
|
|
}
|
|
];
|
|
|
|
describe('when proxyReqPathResolver', function () {
|
|
|
|
tests.forEach(function (test) {
|
|
describe('is ' + test.resolverType, function () {
|
|
describe('it returns a promise which resolves a container with expected url', function () {
|
|
test.data.forEach(function (data) {
|
|
it(data.url, function (done) {
|
|
container.user.req = { url: data.url };
|
|
container.options.proxyReqPathResolver = test.resolverFn;
|
|
var r = resolveProxyReqPath(container);
|
|
|
|
assert(r instanceof Promise, 'Expect resolver to return a thennable');
|
|
|
|
r.then(function (container) {
|
|
var response;
|
|
try {
|
|
response = container.proxy.reqBuilder.path;
|
|
if (!response) {
|
|
throw new Error('reqBuilder.url is undefined');
|
|
}
|
|
} catch (e) {
|
|
done(e);
|
|
}
|
|
expect(response).to.equal(data.parsed);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('testing example code in docs', function () {
|
|
it('works as advertised', function (done) {
|
|
var proxyTarget = require('../test/support/proxyTarget');
|
|
var proxyRouteFn = [{
|
|
method: 'get',
|
|
path: '/tent',
|
|
fn: function (req, res) {
|
|
res.send(req.url);
|
|
}
|
|
}];
|
|
|
|
var proxyServer = proxyTarget(12345, 100, proxyRouteFn);
|
|
var app = express();
|
|
app.use(proxy('localhost:12345', {
|
|
proxyReqPathResolver: function (req) {
|
|
var parts = req.url.split('?');
|
|
var queryString = parts[1];
|
|
var updatedPath = parts[0].replace(/test/, 'tent');
|
|
return updatedPath + (queryString ? '?' + queryString : '');
|
|
}
|
|
}));
|
|
|
|
request(app)
|
|
.get('/test?a=1&b=2&c=3')
|
|
.end(function (err, res) {
|
|
assert.equal(res.text, '/tent?a=1&b=2&c=3');
|
|
proxyServer.close();
|
|
done(err);
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|