Skip to content

Commit 222e1f7

Browse files
authored
test: improve tests (#1204)
* test(path-rewriter): remove as any * test: use mock server in tests for less brittle tests * test: refactor proxyReq, req and res mocks in tests
1 parent a4f0821 commit 222e1f7

16 files changed

Lines changed: 341 additions & 349 deletions

test/e2e/hono.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('E2E Hono', () => {
3434
app.use(
3535
'/api',
3636
createHonoProxyMiddleware({
37-
target: `http://localhost:${mockTargetServer.port}`,
37+
target: mockTargetServer.url,
3838
pathFilter: '/api',
3939
}),
4040
);
@@ -74,7 +74,7 @@ describe('E2E Hono', () => {
7474

7575
app.use(
7676
createHonoProxyMiddleware({
77-
target: `http://localhost:${mockTargetServer.port}`,
77+
target: mockTargetServer.url,
7878
pathFilter: '/api',
7979
}),
8080
);

test/e2e/http-proxy-middleware.spec.ts

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import type * as http from 'node:http';
2-
31
import bodyParser from 'body-parser';
42
import type * as express from 'express';
53
import type { CompletedRequest, Mockttp } from 'mockttp';
@@ -8,6 +6,7 @@ import request from 'supertest';
86
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
97

108
import type { Filter, Logger } from '../../src/types.js';
9+
import { createMockRequest, createMockResponse } from '../test-utils.js';
1110
import { createApp, createAppWithPath, createProxyMiddleware, fixRequestBody } from './test-kit.js';
1211

1312
describe('E2E http-proxy-middleware', () => {
@@ -23,10 +22,8 @@ describe('E2E http-proxy-middleware', () => {
2322

2423
describe('pathFilter matching', () => {
2524
describe('do not proxy', () => {
26-
const mockReq: http.IncomingMessage = {
27-
url: '/foo/bar',
28-
} as http.IncomingMessage;
29-
const mockRes: http.ServerResponse = {} as http.ServerResponse;
25+
const mockReq = createMockRequest({ url: '/foo/bar' });
26+
const mockRes = createMockResponse();
3027
const mockNext: express.NextFunction = vi.fn();
3128

3229
beforeEach(() => {
@@ -62,7 +59,7 @@ describe('E2E http-proxy-middleware', () => {
6259
agent = request(
6360
createApp(
6461
createProxyMiddleware({
65-
target: `http://localhost:${mockTargetServer.port}`,
62+
target: mockTargetServer.url,
6663
pathFilter: '/api',
6764
}),
6865
),
@@ -81,7 +78,7 @@ describe('E2E http-proxy-middleware', () => {
8178
.withExactQuery('?q=1&r=[2,3]')
8279
.thenReply(200, 'OK');
8380

84-
const response = await request(`http://localhost:${mockTargetServer.port}`)
81+
const response = await request(mockTargetServer.url)
8582
.get(`/api/b/c/dp?q=1&r=[2,3]#s`)
8683
.expect(200);
8784

@@ -95,7 +92,7 @@ describe('E2E http-proxy-middleware', () => {
9592
createApp(
9693
bodyParser.urlencoded({ extended: false }),
9794
createProxyMiddleware({
98-
target: `http://localhost:${mockTargetServer.port}`,
95+
target: mockTargetServer.url,
9996
pathFilter: '/api',
10097
on: {
10198
proxyReq: fixRequestBody,
@@ -116,7 +113,7 @@ describe('E2E http-proxy-middleware', () => {
116113
createApp(
117114
bodyParser.json(),
118115
createProxyMiddleware({
119-
target: `http://localhost:${mockTargetServer.port}`,
116+
target: mockTargetServer.url,
120117
pathFilter: '/api',
121118
on: {
122119
proxyReq: fixRequestBody,
@@ -142,7 +139,7 @@ describe('E2E http-proxy-middleware', () => {
142139
agent = request(
143140
createApp(
144141
createProxyMiddleware({
145-
target: `http://localhost:${mockTargetServer.port}`,
142+
target: mockTargetServer.url,
146143
pathFilter: filter,
147144
}),
148145
),
@@ -161,7 +158,7 @@ describe('E2E http-proxy-middleware', () => {
161158
agent = request(
162159
createApp(
163160
createProxyMiddleware({
164-
target: `http://localhost:${mockTargetServer.port}`,
161+
target: mockTargetServer.url,
165162
pathFilter: filter,
166163
}),
167164
),
@@ -187,7 +184,7 @@ describe('E2E http-proxy-middleware', () => {
187184
agent = request(
188185
createApp(
189186
createProxyMiddleware({
190-
target: `http://localhost:${mockTargetServer.port}`,
187+
target: mockTargetServer.url,
191188
pathFilter: filter,
192189
logger: logger,
193190
}),
@@ -206,7 +203,7 @@ describe('E2E http-proxy-middleware', () => {
206203
agent = request(
207204
createApp(
208205
createProxyMiddleware({
209-
target: `http://localhost:${mockTargetServer.port}`,
206+
target: mockTargetServer.url,
210207
pathFilter: ['/api', '/ajax'],
211208
}),
212209
),
@@ -236,7 +233,7 @@ describe('E2E http-proxy-middleware', () => {
236233
agent = request(
237234
createApp(
238235
createProxyMiddleware({
239-
target: `http://localhost:${mockTargetServer.port}`,
236+
target: mockTargetServer.url,
240237
pathFilter: '/api/**',
241238
}),
242239
),
@@ -255,7 +252,7 @@ describe('E2E http-proxy-middleware', () => {
255252
agent = request(
256253
createApp(
257254
createProxyMiddleware({
258-
target: `http://localhost:${mockTargetServer.port}`,
255+
target: mockTargetServer.url,
259256
pathFilter: ['**/*.html', '!**.json'],
260257
}),
261258
),
@@ -280,7 +277,7 @@ describe('E2E http-proxy-middleware', () => {
280277
agent = request(
281278
createApp(
282279
createProxyMiddleware({
283-
target: `http://localhost:${mockTargetServer.port}`,
280+
target: mockTargetServer.url,
284281
pathFilter: '/api',
285282
headers: { host: 'foobar.dev' },
286283
}),
@@ -324,7 +321,7 @@ describe('E2E http-proxy-middleware', () => {
324321
const resetAgent = request(
325322
createApp(
326323
createProxyMiddleware({
327-
target: `http://localhost:${mockTargetServer.port}`,
324+
target: mockTargetServer.url,
328325
}),
329326
),
330327
);
@@ -339,7 +336,7 @@ describe('E2E http-proxy-middleware', () => {
339336
const closeAgent = request(
340337
createApp(
341338
createProxyMiddleware({
342-
target: `http://localhost:${mockTargetServer.port}`,
339+
target: mockTargetServer.url,
343340
}),
344341
),
345342
);
@@ -384,7 +381,7 @@ describe('E2E http-proxy-middleware', () => {
384381
agent = request(
385382
createApp(
386383
createProxyMiddleware({
387-
target: `http://localhost:${mockTargetServer.port}`,
384+
target: mockTargetServer.url,
388385
pathFilter: '/api',
389386
on: {
390387
proxyRes: (proxyRes, req, res) => {
@@ -424,7 +421,7 @@ describe('E2E http-proxy-middleware', () => {
424421
agent = request(
425422
createApp(
426423
createProxyMiddleware({
427-
target: `http://localhost:${mockTargetServer.port}`,
424+
target: mockTargetServer.url,
428425
pathFilter: '/api',
429426
on: {
430427
proxyReq: (proxyReq, req, res) => {
@@ -454,7 +451,7 @@ describe('E2E http-proxy-middleware', () => {
454451
agent = request(
455452
createApp(
456453
createProxyMiddleware({
457-
target: `http://localhost:${mockTargetServer.port}`,
454+
target: mockTargetServer.url,
458455
pathRewrite: {
459456
'^/api': '/rest',
460457
'^/remove': '',
@@ -482,7 +479,7 @@ describe('E2E http-proxy-middleware', () => {
482479
agent = request(
483480
createAppWithPath(
484481
'/api',
485-
createProxyMiddleware({ target: `http://localhost:${mockTargetServer.port}/api` }),
482+
createProxyMiddleware({ target: `${mockTargetServer.url}/api` }),
486483
),
487484
);
488485
});
@@ -511,7 +508,7 @@ describe('E2E http-proxy-middleware', () => {
511508
agent = request(
512509
createApp(
513510
createProxyMiddleware({
514-
target: `http://localhost:${mockTargetServer.port}`,
511+
target: mockTargetServer.url,
515512
pathFilter: '/api',
516513
logger: customLogger,
517514
}),
@@ -524,15 +521,15 @@ describe('E2E http-proxy-middleware', () => {
524521
expect(logMessages).not.toBeUndefined();
525522
expect(logMessages.length).toBe(1);
526523
expect(logMessages.at(0)).toBe(
527-
`[HPM] GET /api/foo/bar -> http://localhost:${mockTargetServer.port}/api/foo/bar [200]`,
524+
`[HPM] GET /api/foo/bar -> ${mockTargetServer.url}/api/foo/bar [200]`,
528525
);
529526
});
530527

531528
it('should have logged messages when router used', async () => {
532529
agent = request(
533530
createApp(
534531
createProxyMiddleware({
535-
router: () => `http://localhost:${mockTargetServer.port}`,
532+
router: () => mockTargetServer.url,
536533
pathFilter: '/api',
537534
logger: customLogger,
538535
}),
@@ -545,7 +542,7 @@ describe('E2E http-proxy-middleware', () => {
545542
expect(logMessages).not.toBeUndefined();
546543
expect(logMessages.length).toBe(1);
547544
expect(logMessages.at(0)).toBe(
548-
`[HPM] GET /api/foo/bar -> http://localhost:${mockTargetServer.port}/api/foo/bar [200]`,
545+
`[HPM] GET /api/foo/bar -> ${mockTargetServer.url}/api/foo/bar [200]`,
549546
);
550547
});
551548
});

test/e2e/http-server.spec.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,40 @@
11
import * as http from 'node:http';
22

3+
import type { Mockttp } from 'mockttp';
4+
import { getLocal } from 'mockttp';
35
import request from 'supertest';
4-
import { describe, expect, it } from 'vitest';
6+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
57

68
import { createProxyMiddleware } from './test-kit.js';
79

810
describe('http integration', () => {
11+
let targetServer: Mockttp;
12+
13+
beforeEach(async () => {
14+
targetServer = getLocal();
15+
await targetServer.start();
16+
});
17+
18+
afterEach(async () => {
19+
await targetServer.stop();
20+
});
21+
922
it('should work with raw node http RequestHandler', async () => {
23+
await targetServer
24+
.forGet('/get')
25+
.thenReply(200, JSON.stringify({ url: `${targetServer.url}/get` }), {
26+
'content-type': 'application/json',
27+
});
28+
1029
const handler = createProxyMiddleware({
1130
changeOrigin: true,
12-
target: 'http://httpbin.org',
31+
target: targetServer.url,
1332
});
1433

1534
const server = http.createServer(handler);
1635
const response = await request(server).get('/get').expect(200);
1736

1837
expect(response.ok).toBe(true);
19-
expect(response.body.url).toBe('http://httpbin.org/get');
38+
expect(response.body.url).toBe(`${targetServer.url}/get`);
2039
});
2140
});

test/e2e/path-rewriter.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('E2E pathRewrite', () => {
2626
const agent = request(
2727
createApp(
2828
createProxyMiddleware({
29-
target: `http://localhost:${mockTargetServer.port}`,
29+
target: mockTargetServer.url,
3030
pathRewrite: {
3131
'^/foobar/api/': '/api/',
3232
},
@@ -49,7 +49,7 @@ describe('E2E pathRewrite', () => {
4949
const agent = request(
5050
createApp(
5151
createProxyMiddleware({
52-
target: `http://localhost:${mockTargetServer.port}`,
52+
target: mockTargetServer.url,
5353
pathRewrite(path, req) {
5454
return path.replace('/foobar', '');
5555
},
@@ -71,7 +71,7 @@ describe('E2E pathRewrite', () => {
7171
const agent = request(
7272
createApp(
7373
createProxyMiddleware({
74-
target: `http://localhost:${mockTargetServer.port}`,
74+
target: mockTargetServer.url,
7575
pathRewrite(path, req) {
7676
return undefined;
7777
},

test/e2e/plugins.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ describe('E2E Plugins', () => {
3030
};
3131

3232
const config: Options = {
33-
target: `http://localhost:${mockTargetServer.port}`,
33+
target: mockTargetServer.url,
3434
plugins: [simplePlugin], // register a plugin
3535
};
3636
const proxyMiddleware = createProxyMiddleware(config);

0 commit comments

Comments
 (0)