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))
+ })
+})