Skip to content

Commit 1ad815f

Browse files
author
Nicklas Utgaard
committed
feat(middleware): added a default logging middleware
1 parent f6c1b8c commit 1ad815f

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

src/middleware-utils.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,29 @@ export default class MiddlewareUtils {
3939
});
4040
};
4141
}
42+
43+
static loggingMiddleware(): Middleware {
44+
return (request, response) => {
45+
// tslint:disable
46+
console.groupCollapsed(`${request.method} ${request.url}`);
47+
console.groupCollapsed('config');
48+
console.log('queryParams', request.queryParams);
49+
console.log('pathParams', request.pathParams);
50+
console.log('body', request.body);
51+
if (request.init) {
52+
console.log('header', request.init.headers);
53+
}
54+
console.groupEnd();
55+
56+
try {
57+
console.log('response', JSON.parse(response.body));
58+
} catch (e) {
59+
console.log('response', response);
60+
}
61+
62+
console.groupEnd();
63+
// tslint:enable
64+
return response;
65+
};
66+
}
4267
}

test/console-mock.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export default class ConsoleMock {
2+
private static oldConsole = global.console;
3+
private static newConsole = Object.create(ConsoleMock.oldConsole);
4+
5+
static setup() {
6+
ConsoleMock.newConsole.trace = jest.fn();
7+
ConsoleMock.newConsole.debug = jest.fn();
8+
ConsoleMock.newConsole.log = jest.fn();
9+
ConsoleMock.newConsole.warn = jest.fn();
10+
ConsoleMock.newConsole.error = jest.fn();
11+
ConsoleMock.newConsole.group = jest.fn();
12+
ConsoleMock.newConsole.groupCollapsed = jest.fn();
13+
ConsoleMock.newConsole.groupEnd = jest.fn();
14+
15+
global.console = ConsoleMock.newConsole;
16+
}
17+
18+
static teardown() {
19+
global.console = ConsoleMock.oldConsole;
20+
}
21+
}

test/middleware-utils.test.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@ import { HandlerArgument, ResponseData } from '../src/types';
22
import MathMock from './math-mock';
33
import { JSONValue } from '../src/yet-another-fetch-mock';
44
import MiddlewareUtils from '../src/middleware-utils';
5+
import ConsoleMock from './console-mock';
56

67
describe('middleware-utils', () => {
7-
beforeAll(MathMock.setup);
8-
afterAll(MathMock.teardown);
8+
beforeAll(() => {
9+
MathMock.setup();
10+
ConsoleMock.setup();
11+
});
12+
13+
afterAll(() => {
14+
MathMock.teardown();
15+
ConsoleMock.teardown();
16+
});
917

1018
it('should combine middlewares', done => {
1119
MathMock.fixRandom(0.2);
@@ -78,4 +86,11 @@ describe('middleware-utils', () => {
7886
const value: JSONValue = { data: null };
7987
done();
8088
});
89+
90+
it('should should log the request', () => {
91+
const logging = MiddlewareUtils.loggingMiddleware();
92+
logging({ init: { headers: {} } } as HandlerArgument, 'resp' as ResponseData);
93+
94+
expect(console.log).toBeCalledTimes(5);
95+
});
8196
});

0 commit comments

Comments
 (0)