From 0690de0a921954f274307966823935a23e542ba1 Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Tue, 25 Feb 2020 15:17:50 +0100 Subject: [PATCH 1/2] Actually rejects when await app.after() or await app.register() --- plugin.js | 1 + test/after-pass-through.test.js | 8 +++--- test/await-after.test.js | 48 +++++++++++++++++++-------------- test/await-use.test.js | 46 ++++++++++++++++--------------- 4 files changed, 59 insertions(+), 44 deletions(-) diff --git a/plugin.js b/plugin.js index c250291..eb25850 100644 --- a/plugin.js +++ b/plugin.js @@ -145,6 +145,7 @@ Plugin.prototype._pushToAsyncQ = function (fn) { debug('_pushToAsyncQ', this.name) if (this.asyncQ.length() === 0) { this.server.after((err, cb) => { + this._error = err this.q.pause() debug('resuming asyncQ', this.name) this.asyncQ.resume() diff --git a/test/after-pass-through.test.js b/test/after-pass-through.test.js index a945c17..85ec603 100644 --- a/test/after-pass-through.test.js +++ b/test/after-pass-through.test.js @@ -8,15 +8,17 @@ boot(app) t.plan(5) +const e = new Error('kaboom') + app.use(function (f, opts) { - return Promise.reject(new Error('kaboom')) + return Promise.reject(e) }).after(function (err, cb) { - t.pass('this is just called') + t.is(err, e) cb(err) }).after(function () { t.pass('this is just called') }).after(function (err, cb) { - t.pass('this is just called') + t.is(err, e) cb(err) }) diff --git a/test/await-after.test.js b/test/await-after.test.js index caed943..1b3ea90 100644 --- a/test/await-after.test.js +++ b/test/await-after.test.js @@ -134,55 +134,59 @@ test('await after - promise returning function plugins + promise chaining', asyn t.pass('reachable') }) -test('await after - error handling, async throw', async (t) => { +test('await after - error handling, async throw', { only: true }, async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) + + const e = new Error('kaboom') app.use(async (f, opts) => { throw Error('kaboom') }) - await app.after() + await t.rejects(app.after(), e) - t.rejects(() => app.ready(), Error('kaboom')) + await t.rejects(() => app.ready(), Error('kaboom')) }) test('await after - error handling, async throw, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) + + const e = new Error('kaboom') app.use(async (f, opts) => { app.use(async (f, opts) => { - throw Error('kaboom') + throw e }) }) - await app.after() - t.rejects(() => app.ready(), Error('kaboom')) + await t.rejects(app.after()) + await t.rejects(() => app.ready(), e) }) test('await after - error handling, same tick cb err', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) app.use((f, opts, cb) => { cb(Error('kaboom')) }) - await app.after() - t.rejects(() => app.ready(), Error('kaboom')) + await t.rejects(app.after()) + await t.rejects(app.ready(), Error('kaboom')) }) test('await after - error handling, same tick cb err, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) app.use((f, opts, cb) => { app.use((f, opts, cb) => { @@ -190,28 +194,30 @@ test('await after - error handling, same tick cb err, nested', async (t) => { }) cb() }) - await app.after() - t.rejects(() => app.ready(), Error('kaboom')) + + await t.rejects(app.after()) + await t.rejects(app.ready(), Error('kaboom')) }) test('await after - error handling, future tick cb err', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) app.use((f, opts, cb) => { setImmediate(() => { cb(Error('kaboom')) }) }) - await app.after() - t.rejects(() => app.ready(), Error('kaboom')) + + await t.rejects(app.after()) + await t.rejects(app.ready(), Error('kaboom')) }) test('await after - error handling, future tick cb err, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) app.use((f, opts, cb) => { app.use((f, opts, cb) => { @@ -219,8 +225,8 @@ test('await after - error handling, future tick cb err, nested', async (t) => { }) cb() }) - await app.after() - t.rejects(() => app.ready(), Error('kaboom')) + await t.rejects(app.after(), Error('kaboom')) + await t.rejects(app.ready(), Error('kaboom')) }) test('await after complex scenario', async (t) => { @@ -332,6 +338,8 @@ test('without autostart and with override', async (t) => { }) test('stop processing after errors', async (t) => { + t.plan(2) + const app = boot() try { diff --git a/test/await-use.test.js b/test/await-use.test.js index 7aedfaa..224b7ba 100644 --- a/test/await-use.test.js +++ b/test/await-use.test.js @@ -104,30 +104,34 @@ test('await use - await and use chaining', async (t) => { t.pass('reachable') }) +function thenableRejects (t, thenable, err) { + return t.rejects(async () => { await thenable }, err) +} + test('await use - error handling, async throw', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) - await app.use(async (f, opts) => { + await thenableRejects(t, app.use(async (f, opts) => { throw Error('kaboom') - }) + }), Error('kaboom')) - t.rejects(() => app.ready(), Error('kaboom')) + await t.rejects(app.ready(), Error('kaboom')) }) test('await use - error handling, async throw, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(3) - await app.use(async (f, opts) => { - await app.use(async (f, opts) => { + await thenableRejects(t, app.use(async (f, opts) => { + await thenableRejects(t, app.use(async (f, opts) => { throw Error('kaboom') - }) - }) + }), Error('kaboom')) + }, Error('kaboom'))) t.rejects(() => app.ready(), Error('kaboom')) }) @@ -136,11 +140,11 @@ test('await use - error handling, same tick cb err', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) - await app.use((f, opts, cb) => { + await thenableRejects(t, app.use((f, opts, cb) => { cb(Error('kaboom')) - }) + }), Error('kaboom')) t.rejects(() => app.ready(), Error('kaboom')) }) @@ -149,14 +153,14 @@ test('await use - error handling, same tick cb err, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) - await app.use((f, opts, cb) => { + await thenableRejects(t, app.use((f, opts, cb) => { app.use((f, opts, cb) => { cb(Error('kaboom')) }) cb() - }) + }), Error('kaboom')) t.rejects(() => app.ready(), Error('kaboom')) }) @@ -165,11 +169,11 @@ test('await use - error handling, future tick cb err', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) - await app.use((f, opts, cb) => { + await thenableRejects(t, app.use((f, opts, cb) => { setImmediate(() => { cb(Error('kaboom')) }) - }) + }), Error('kaboom')) t.rejects(() => app.ready(), Error('kaboom')) }) @@ -178,14 +182,14 @@ test('await use - error handling, future tick cb err, nested', async (t) => { const app = {} boot(app) - t.plan(1) + t.plan(2) - await app.use((f, opts, cb) => { + await thenableRejects(t, app.use((f, opts, cb) => { app.use((f, opts, cb) => { setImmediate(() => { cb(Error('kaboom')) }) }) cb() - }) + }), Error('kaboom')) t.rejects(() => app.ready(), Error('kaboom')) }) From 266107a4811d06b018de9765a2a366fcbd760aad Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Thu, 27 Feb 2020 09:59:30 +0100 Subject: [PATCH 2/2] Update test/await-after.test.js Co-Authored-By: Manuel Spigolon --- test/await-after.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/await-after.test.js b/test/await-after.test.js index 1b3ea90..4bdccf2 100644 --- a/test/await-after.test.js +++ b/test/await-after.test.js @@ -134,7 +134,7 @@ test('await after - promise returning function plugins + promise chaining', asyn t.pass('reachable') }) -test('await after - error handling, async throw', { only: true }, async (t) => { +test('await after - error handling, async throw', async (t) => { const app = {} boot(app)