From cd6f0607d7edb3ae2ec08427fb1284778c872c68 Mon Sep 17 00:00:00 2001 From: "Schaaf, Martin" <703355+mschaaf@users.noreply.github.com> Date: Mon, 25 Mar 2019 17:28:20 +0100 Subject: [PATCH] =?UTF-8?q?fix(stack):=20On=20error=20in=20beforeAll/after?= =?UTF-8?q?All=20relevant=20information=20to=20debug=20are=20miss=E2=80=A6?= =?UTF-8?q?=20(#232)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * On error in beforeAll/afterAll relevant information to debug are missing. e.g. on Firefix no stack is available so construct one if filename and lineno are available. * fix eslint error: Extra semicolon semi --- src/adapter.js | 19 +++++++++++++++---- test/adapter.spec.js | 10 ++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/adapter.js b/src/adapter.js index 9218b59..278e7fe 100644 --- a/src/adapter.js +++ b/src/adapter.js @@ -60,13 +60,24 @@ function getRelevantStackFrom (stack) { * @return {String} Formatted step. */ function formatFailedStep (step) { - // Safari seems to have no stack trace, - // so we just return the error message: - if (!step.stack) { return step.message } - var relevantMessage = [] var relevantStack = [] + // Safari/Firefox seems to have no stack trace, + // so we just return the error message and if available + // construct a stacktrace out of filename and lineno: + if (!step.stack) { + if (step.filename) { + let stackframe = step.filename + if (step.lineno) { + stackframe = stackframe + ':' + step.lineno + } + relevantStack.push(stackframe) + } + relevantMessage.push(step.message) + return relevantMessage.concat(relevantStack).join('\n') + } + // Remove the message prior to processing the stack to prevent issues like // https://github.com/karma-runner/karma-jasmine/issues/79 var stack = step.stack.replace('Error: ' + step.message, '') diff --git a/test/adapter.spec.js b/test/adapter.spec.js index cc54f44..1d4370e 100644 --- a/test/adapter.spec.js +++ b/test/adapter.spec.js @@ -335,6 +335,16 @@ describe('jasmine adapter', function () { expect(formatFailedStep(step)).toBe('MESSAGE') }) + it('should report message, filename and linenumber if no stack trace but filename and lineno', function () { + var step = { + passed: false, + lineno: 45, + filename: 'source/controller.js', + message: 'MESSAGE' + } + + expect(formatFailedStep(step)).toBe('MESSAGE\nsource/controller.js:45') + }) it('should properly format message containing new-line characters', function () { // FF does not have the message in the stack trace