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()] diff --git a/test/supertest.js b/test/supertest.js index a25ce95..d6e6690 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'; @@ -750,9 +751,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); @@ -776,9 +775,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); + }; +};