lux-framework
Version:
Build scalable, Node.js-powered REST APIs with almost no code.
84 lines (71 loc) • 2.29 kB
JavaScript
// @flow
import EventEmitter from 'events';
import { expect } from 'chai';
import { it, describe, before } from 'mocha';
import { FORMATS } from '../constants';
import { createRequestLogger } from '../request-logger';
import sleep from '../../../utils/sleep';
import { getTestApp } from '../../../../test/utils/get-test-app';
import {
createResponse,
createRequestBuilder
} from '../../../../test/utils/mocks';
import Logger from '../index';
describe('module "logger/request-logger"', () => {
describe('#createRequestLogger()', () => {
FORMATS.forEach(format => {
describe(`- format "${format}"`, () => {
let subject;
before(() => {
const logger = new Logger({
format,
level: 'INFO',
enabled: true,
filter: {
params: []
}
});
subject = createRequestLogger(logger);
});
it('returns a request logger function', () => {
expect(subject)
.to.be.a('function')
.with.lengthOf(3);
});
describe('- logger function', () => {
let req;
let res;
before(async () => {
const { router } = await getTestApp();
const emitter = new EventEmitter();
const createRequest = createRequestBuilder({
path: '/',
route: router.get('GET:/posts'),
params: {}
});
req = createRequest();
res = Object.assign(createResponse(), {
on: (...args) => emitter.on(...args),
once: (...args) => emitter.once(...args),
emit: (...args) => emitter.emit(...args),
removeListener: (...args) => emitter.removeListener(...args),
removeAllListeners: (...args) => (
emitter.removeAllListeners(...args)
)
});
});
it('does not throw an error', async () => {
expect(() => {
subject(req, res, {
startTime: Date.now()
});
}).to.not.throw(Error);
await sleep(10);
res.emit('finish');
await sleep(10);
});
});
});
});
});
});