From 535018661430846bc6ce152656f0fb0501da0f76 Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Sun, 13 Dec 2015 13:02:48 +0000 Subject: [PATCH] add async mock capability.. fixes #26 --- example/mock-async/.local-web-server.json | 8 ++++++++ example/mock-async/mocks/delayed.js | 10 ++++++++++ lib/middleware.js | 3 +-- test/test.js | 28 ++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 example/mock-async/.local-web-server.json create mode 100644 example/mock-async/mocks/delayed.js diff --git a/example/mock-async/.local-web-server.json b/example/mock-async/.local-web-server.json new file mode 100644 index 0000000..d1168ab --- /dev/null +++ b/example/mock-async/.local-web-server.json @@ -0,0 +1,8 @@ +{ + "mocks": [ + { + "route": "/", + "module": "/mocks/delayed.js" + } + ] +} diff --git a/example/mock-async/mocks/delayed.js b/example/mock-async/mocks/delayed.js new file mode 100644 index 0000000..6e7f4c0 --- /dev/null +++ b/example/mock-async/mocks/delayed.js @@ -0,0 +1,10 @@ +module.exports = { + response: function (ctx) { + return new Promise((resolve, reject) => { + setTimeout(() => { + ctx.body = `

You waited 2s for this

` + resolve() + }, 2000) + }) + } +} diff --git a/lib/middleware.js b/lib/middleware.js index 9b16912..ecacc43 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -101,10 +101,9 @@ function mockResponses (route, targets) { } if (target) { - // debug('target response: %s', target.response) if (t.isFunction(target.response)) { const pathMatches = ctx.path.match(pathRe).slice(1) - target.response.apply(null, [ctx].concat(pathMatches)) + return target.response.apply(null, [ctx].concat(pathMatches)) } else if (t.isPlainObject(target.response)) { Object.assign(ctx.response, target.response) } else { diff --git a/test/test.js b/test/test.js index ca73da0..a5da31b 100644 --- a/test/test.js +++ b/test/test.js @@ -335,3 +335,31 @@ test('mock: response function args', function (t) { .then(server.close.bind(server)) }) }) + +test('mock: async response function', function (t) { + t.plan(2) + const app = localWebServer({ + log: { format: 'none' }, + mocks: [ + { + route: '/test', + responses: { + response: function (ctx) { + return new Promise((resolve, reject) => { + setTimeout(() => { + ctx.body = 'test' + resolve() + }, 10) + }) + } + } + } + ] + }) + const server = http.createServer(app.callback()) + server.listen(8100, () => { + request('http://localhost:8100/test') + .then(checkResponse(t, 200, /test/)) + .then(server.close.bind(server)) + }) +})