From b24da855443221dd13c391aae9c4c40c7bd8fe7d Mon Sep 17 00:00:00 2001 From: Alexandre ABRIOUX Date: Tue, 29 Mar 2022 14:35:03 +0200 Subject: [PATCH 1/2] test: add failing test --- test/supertest.js | 9 +++------ test/throwError.js | 10 ++++++++++ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 test/throwError.js diff --git a/test/supertest.js b/test/supertest.js index 7561d1f..cbb36a6 100644 --- a/test/supertest.js +++ b/test/supertest.js @@ -9,6 +9,7 @@ const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const nock = require('nock'); const request = require('../index.js'); +const throwError = require('./throwError'); process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; @@ -748,9 +749,7 @@ describe('request(app)', function () { it('reports errors', function (done) { get - .expect(function (res) { - throw new Error('failed'); - }) + .expect(throwError('failed')) .end(function (err) { err.message.should.equal('failed'); shouldIncludeStackWithThisFile(err); @@ -774,9 +773,7 @@ describe('request(app)', function () { it('ensures truthy errors returned from asserts are throw to end', function (done) { get - .expect(function (res) { - return new Error('some descriptive error'); - }) + .expect(throwError('some descriptive error')) .end(function (err) { err.message.should.equal('some descriptive error'); shouldIncludeStackWithThisFile(err); diff --git a/test/throwError.js b/test/throwError.js new file mode 100644 index 0000000..ce7ee52 --- /dev/null +++ b/test/throwError.js @@ -0,0 +1,10 @@ +'use strict'; + +/** + * This method needs to reside in its own module in order to properly test stack trace handling. + */ +module.exports = function throwError(message) { + return function() { + throw new Error(message); + }; +}; From 3dba4e9df3f0f84fde1685c249aed3b1da636f05 Mon Sep 17 00:00:00 2001 From: Alexandre ABRIOUX Date: Tue, 29 Mar 2022 14:36:41 +0200 Subject: [PATCH 2/2] fix: add stacktrace to failed expect function call --- lib/test.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/test.js b/lib/test.js index d835fbd..83266eb 100644 --- a/lib/test.js +++ b/lib/test.js @@ -303,7 +303,12 @@ function wrapAssertFn(assertFn) { return function(res) { let badStack; - const err = assertFn(res); + let err; + try { + err = assertFn(res); + } catch (e) { + err = e; + } if (err instanceof Error && err.stack) { badStack = err.stack.replace(err.message, '').split('\n').slice(1); err.stack = [err.toString()]