mock responses
This commit is contained in:
@ -3,7 +3,7 @@ const path = require('path')
|
||||
const http = require('http')
|
||||
const url = require('url')
|
||||
const arrayify = require('array-back')
|
||||
let debug
|
||||
let debug, pathToRegexp
|
||||
|
||||
/**
|
||||
* @module local-web-server
|
||||
@ -57,7 +57,7 @@ function localWebServer (options) {
|
||||
const convert = require('koa-convert')
|
||||
const cors = require('kcors')
|
||||
const _ = require('koa-route')
|
||||
const pathToRegexp = require('path-to-regexp')
|
||||
pathToRegexp = require('path-to-regexp')
|
||||
debug = require('debug')('local-web-server')
|
||||
|
||||
const log = options.log
|
||||
@ -70,9 +70,6 @@ function localWebServer (options) {
|
||||
function verbose (category, message) {
|
||||
if (options.verbose) {
|
||||
debug(category, message)
|
||||
// process.nextTick(() => {
|
||||
// app.emit('verbose', category, message)
|
||||
// })
|
||||
}
|
||||
}
|
||||
app._verbose = verbose
|
||||
@ -93,8 +90,9 @@ function localWebServer (options) {
|
||||
app.use(_.all(route.from, proxyRequest(route, app)))
|
||||
} else {
|
||||
const rewrite = require('koa-rewrite')
|
||||
verbose('local rewrite', `${route.from} -> ${route.to}`)
|
||||
app.use(rewrite(route.from, route.to))
|
||||
const mw = rewrite(route.from, route.to)
|
||||
mw._name = 'rewrite'
|
||||
app.use(mw)
|
||||
}
|
||||
}
|
||||
})
|
||||
@ -110,7 +108,6 @@ function localWebServer (options) {
|
||||
if (!options['no-cache']) {
|
||||
const conditional = require('koa-conditional-get')
|
||||
const etag = require('koa-etag')
|
||||
// verbose('etag caching', 'enabled')
|
||||
app.use(conditional())
|
||||
app.use(etag())
|
||||
}
|
||||
@ -239,11 +236,39 @@ function mockResponses (options) {
|
||||
return function mockResponses (ctx, next) {
|
||||
if (/\.mock.js$/.test(ctx.path)) {
|
||||
const mocks = arrayify(require(path.join(options.root, ctx.path)))
|
||||
const mock = mocks.find(mock => {
|
||||
return !mock.request || mock.request.method === ctx.method
|
||||
const testValue = require('test-value')
|
||||
const t = require('typical')
|
||||
|
||||
/* find a mock with compatible method and accepts */
|
||||
let mock = mocks.find(mock => {
|
||||
return testValue(mock, {
|
||||
request: {
|
||||
method: [ ctx.method, undefined ],
|
||||
accepts: type => ctx.accepts(type)
|
||||
}
|
||||
})
|
||||
})
|
||||
Object.assign(ctx.response, mock.response)
|
||||
options.verbose('mock response', JSON.stringify(mock.response), JSON.stringify(ctx.response))
|
||||
|
||||
/* else take the first mock without a request (no request means 'all requests') */
|
||||
if (!mock) {
|
||||
mock = mocks.find(mock => !mock.request)
|
||||
}
|
||||
|
||||
const mockedReponse = {}
|
||||
/* resolve any functions on the mock */
|
||||
Object.keys(mock.response).forEach(key => {
|
||||
if (t.isFunction(mock.response[key])) {
|
||||
mockedReponse[key] = mock.response[key](ctx)
|
||||
} else {
|
||||
mockedReponse[key] = mock.response[key]
|
||||
}
|
||||
})
|
||||
|
||||
if (mock) {
|
||||
Object.assign(ctx.response, mockedReponse)
|
||||
options.verbose('mocked response', JSON.stringify(mockedReponse))
|
||||
options.verbose('actual response', JSON.stringify(ctx.response))
|
||||
}
|
||||
} else {
|
||||
return next()
|
||||
}
|
||||
|
Reference in New Issue
Block a user