express-nemo-request-response-logger
Version:
A middleware for express, adding request and response logging
102 lines (90 loc) • 2.36 kB
JavaScript
const expect = require('chai').expect
const middleware = require('./middleware')
describe('express-nemo-request-response-logger', () => {
context('invalid configuration', () => {
context('when no log event factory is provided', () => {
it('throws an error', () => {
expect(() =>
middleware({
logEventFactory: null
})
).to.throw()
})
})
context('when no logger function name is provided', () => {
it('throws an error', () => {
expect(() =>
middleware({
loggerFunctionName: null
})
).to.throw()
})
})
})
context('valid configuration', () => {
context('minimum configuration', () => {
it('returns middleware with options exposed', () => {
const mw = middleware()
expect(mw.options).to.not.be.undefined
})
})
})
context('default log event factory', () => {
it('produces a string log event', () => {
const factory = middleware().options.logEventFactory
const req = {
method: 'GET',
url: '/'
}
const res = {
statusCode: 200
}
const logEvent = factory(req, res)
expect(logEvent).to.equal('GET / - HTTP 200')
})
})
context('middleware is called', () => {
let nextCalled
let callArgs
let SUT
const req = {
context: {
logger: {
debug: (...args) => {
callArgs = args
}
}
}
}
const res = {}
const next = () => {
nextCalled = true
}
beforeEach(() => {
nextCalled = false
SUT = middleware({
logEventFactory: () => {
return {}
}
})
})
it('calls next', () => {
SUT(req, res, next)
expect(nextCalled).to.be.true
})
it('passes the log event to the context logger instance', () => {
SUT(req, res, next)
expect(callArgs.length).to.equal(1)
expect(callArgs[0]).to.deep.equal({})
})
it('calls the log event factory with request and response', () => {
let calledCorrectly
const sut = middleware({
logEventFactory: (request, response) =>
(calledCorrectly = request === req && response === res)
})
sut(req, res, next)
expect(calledCorrectly).to.be.true
})
})
})