Skip to content

Commit

Permalink
fix: capture non error type in json reporter (#856)
Browse files Browse the repository at this point in the history
  • Loading branch information
vigneshshanmugam committed Oct 24, 2023
1 parent afed025 commit cb4c8fb
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
2 changes: 1 addition & 1 deletion __tests__/reporters/__snapshots__/json.test.ts.snap
Expand Up @@ -209,7 +209,7 @@ exports[`json reporter writes each step as NDJSON to the FD 1`] = `
{"type":"step/filmstrips","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1"},"step":{"name":"s1","index":1},"root_fields":{"browser":{"relative_trace":{"start":{"us":392583998697}}},"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"index":0},"blob":"dummy","blob_mime":"image/jpeg","package_version":"0.0.1"}
{"type":"step/end","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1"},"step":{"name":"s1","index":1,"status":"succeeded","duration":{"us":10000000}},"root_fields":{"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"source":"function noop() { }","url":"dummy","status":"succeeded"},"url":"dummy","package_version":"0.0.1"}
{"type":"journey/network_info","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1"},"root_fields":{"user_agent":{},"http":{"request":{}},"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"browser":{},"is_navigation_request":true},"package_version":"0.0.1"}
{"type":"journey/browserconsole","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1"},"step":{"name":"step-name","index":0},"root_fields":{"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"text":"Boom","type":"error"},"error":{"name":"Error","message":"boom","stack":""},"package_version":"0.0.1"}
{"type":"journey/browserconsole","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1"},"step":{"name":"step-name","index":0},"root_fields":{"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"text":"Boom","type":"error"},"error":{"name":"Error","message":"boom","stack":"at /foo/bar.js:1:1"},"package_version":"0.0.1"}
{"type":"journey/end","@timestamp":1600300800000000,"journey":{"name":"j1","id":"j1","status":"succeeded"},"root_fields":{"os":{"platform":"darwin"},"package":{"name":"@elastic/synthetics","version":"0.0.1"}},"payload":{"start":0,"end":11,"status":"succeeded"},"package_version":"0.0.1"}
"
`;
18 changes: 17 additions & 1 deletion __tests__/reporters/json.test.ts
Expand Up @@ -103,7 +103,7 @@ describe('json reporter', () => {

it('writes each step as NDJSON to the FD', async () => {
const error = new Error('boom');
error.stack = '';
error.stack = 'at /foo/bar.js:1:1';
reporter.onJourneyRegister(j1);
reporter.onJourneyStart(j1, {
timestamp,
Expand Down Expand Up @@ -229,6 +229,22 @@ describe('json reporter', () => {
expect(journeyEnd.error.stack).toContain(`Error: myError`);
});

it('captures non-error types', async () => {
reporter.onJourneyEnd(j1, {
timestamp,
start: 0,
end: 1,
status: 'failed',
error: 'boom' as any,
options: {},
});

const journeyEnd = (await readAndCloseStreamJson()).find(
json => json.type == 'journey/end'
);
expect(journeyEnd.error.message).toContain(`thrown: 'boom'`);
});

it('writes full journey info if present', async () => {
const journeyOpts = { name: 'name', id: 'id', tags: ['tag1', 'tag2'] };

Expand Down
6 changes: 6 additions & 0 deletions src/reporters/json.ts
Expand Up @@ -52,6 +52,7 @@ import {
JourneyEndResult,
PageMetrics,
} from '../common_types';
import { inspect } from 'util';

/* eslint-disable @typescript-eslint/no-var-requires */
const { version, name } = require('../../package.json');
Expand Down Expand Up @@ -198,6 +199,11 @@ function formatJSONError(error: Error | any, type: OutputType) {
return;
}

// Early exit for non Error objects
if (!(error instanceof Error) || !error.stack) {
return { message: `thrown: ${inspect(error)}` };
}

/**
* Do not process browser errors - console.error and unhandled exceptions
*/
Expand Down

0 comments on commit cb4c8fb

Please sign in to comment.