express-nemo-error-response
Version:
A middleware for express to add error response
138 lines (114 loc) • 3.38 kB
JavaScript
/* global describe context it beforeEach */
const expect = require('chai').expect
const middleware = require('./middleware')
describe('express-nemo-error-response', () => {
let nextCalled = false
let messages = []
const err = new Error('Test error')
const req = { url: '/api/path' }
let res = {}
const testOptions = {
errorMessageTemplate: (_err, _req, _res) => 'test'
}
const next = () => {
nextCalled = true
}
beforeEach(() => {
nextCalled = false
res = {
statusCode: 200,
status: code => {
res.statusCode = code
},
send: m => {
messages.push(m)
}
}
messages = []
})
context('should be a configurable middleware', () => {
it('should store middleware options for us to inspect', () => {
const mw = middleware()
expect(mw.options).to.not.be.undefined
})
context('defaults', () => {
it('default message template if no one is specified', () => {
const mw = middleware({})
expect(mw.options.errorMessageTemplate).to.be.a('function')
})
})
context('overrides', () => {
it('override message template with our own', () => {
const mw = middleware(testOptions)
expect(mw.options.errorMessageTemplate).to.be.equal(
testOptions.errorMessageTemplate
)
})
})
context('invalid', () => {
context('when no errorMessage template is provided', () => {
it('throws an error', () => {
expect(() =>
middleware({
errorMessageTemplate: null
})
).to.throw()
})
})
})
})
context(
'when middleware is called with status code from range 100-399',
() => {
beforeEach(() => {
const min = 100
const max = 399
res.statusCode = Math.floor(Math.random() * (max - min + 1)) + min
})
it('should always call next', () => {
const mw = middleware()
mw(err, req, res, next)
expect(nextCalled).to.equal(true)
})
it('should send a response', () => {
const mw = middleware(testOptions)
mw(err, req, res, next)
expect(messages.length).to.be.equal(1)
expect(messages[0]).to.be.equal('test')
})
it('should set status code to 500', () => {
const mw = middleware()
mw(err, req, res, next)
expect(res.statusCode).to.be.equal(500)
})
}
)
context(
'when middleware is called with status code above or equal to 400',
() => {
let expectedStatusCode
beforeEach(() => {
const min = 400
const max = 999
expectedStatusCode = Math.floor(Math.random() * (max - min + 1)) + min
res.statusCode = expectedStatusCode
})
it('should always call next', () => {
const mw = middleware()
mw(err, req, res, next)
expect(nextCalled).to.equal(true)
})
it('should send a response', () => {
const mw = middleware(testOptions)
mw(err, req, res, next)
expect(messages.length).to.be.equal(1)
expect(messages[0]).to.be.equal('test')
})
it('preserve status code', () => {
const mw = middleware()
mw(err, req, res, next)
expect(res.statusCode).to.be.equal(expectedStatusCode)
})
}
)
})