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