From e925bb15b5f21eac357a3f86170da1241cca3439 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sun, 29 Dec 2019 16:25:28 -0800 Subject: [PATCH] [Breaking] fail any assertion after `.end()` is called Fixes #264. --- lib/test.js | 8 +++++++- test/async-await.js | 26 ++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/test.js b/lib/test.js index 52c0beb1..3e15ea61 100644 --- a/lib/test.js +++ b/lib/test.js @@ -229,12 +229,18 @@ Test.prototype._assert = function assert(ok, opts) { ok = !!ok || !!extra.skip; + var name = defined(extra.message, opts.message, '(unnamed assert)'); + if (this.calledEnd && opts.operator !== 'fail') { + this.fail('.end() already called: ' + name); + return; + } + var res = { id: self.assertCount++, ok: ok, skip: defined(extra.skip, opts.skip), todo: defined(extra.todo, opts.todo, self._todo), - name: defined(extra.message, opts.message, '(unnamed assert)'), + name: name, operator: defined(extra.operator, opts.operator), objectPrintDepth: self._objectPrintDepth }; diff --git a/test/async-await.js b/test/async-await.js index 564e56be..d2af5b8c 100644 --- a/test/async-await.js +++ b/test/async-await.js @@ -123,8 +123,26 @@ tap.test('async5', function (t) { 'ok 3 before request', 'ok 4 after request', 'ok 5 res.statusCode is 200', - 'ok 6 mockDb.state is new', - 'ok 7 error on close', + 'not ok 6 .end() already called: mockDb.state is new', + ' ---', + ' operator: fail', + ' at: Timeout._onTimeout ($TEST/async-await/async5.js:$LINE:$COL)', + ' stack: |-', + ' Error: .end() already called: mockDb.state is new', + ' [... stack stripped ...]', + ' at Timeout._onTimeout ($TEST/async-await/async5.js:$LINE:$COL)', + ' [... stack stripped ...]', + ' ...', + 'not ok 7 .end() already called: error on close', + ' ---', + ' operator: fail', + ' at: Server. ($TEST/async-await/async5.js:$LINE:$COL)', + ' stack: |-', + ' Error: .end() already called: error on close', + ' [... stack stripped ...]', + ' at Server. ($TEST/async-await/async5.js:$LINE:$COL)', + ' [... stack stripped ...]', + ' ...', 'not ok 8 .end() already called', ' ---', ' operator: fail', @@ -138,8 +156,8 @@ tap.test('async5', function (t) { '', '1..8', '# tests 8', - '# pass 7', - '# fail 1' + '# pass 5', + '# fail 3' ].join('\n') + '\n\n'); t.same(r.exitCode, 1); t.same(r.stderr.toString('utf8'), '');