UNPKG

@grafana/faro-core

Version:
166 lines 8.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var initialize_1 = require("../../initialize"); var testUtils_1 = require("../../testUtils"); var transports_1 = require("../../transports"); describe('api.exceptions', function () { function createAPI(_a) { var _b = _a === void 0 ? { dedupe: true } : _a, dedupe = _b.dedupe; var transport = new testUtils_1.MockTransport(); var config = (0, testUtils_1.mockConfig)({ dedupe: dedupe, transports: [transport], }); var api = (0, initialize_1.initializeFaro)(config).api; return [api, transport]; } describe('pushError', function () { var api; var transport; beforeEach(function () { var _a; _a = createAPI(), api = _a[0], transport = _a[1]; }); it('error with overrides', function () { var frames = [ { filename: 'foo.js', function: 'FooFn', colno: 4, lineno: 23, }, { filename: 'bar.js', function: 'BarFn', colno: 6, lineno: 52, }, ]; var additionalContext = { message: 'React error boundary', componentStackTrace: 'componentStackTrace', }; api.pushError(new Error('test exception'), { stackFrames: frames, type: 'TestError', context: additionalContext, }); expect(transport.items).toHaveLength(1); var payload = transport.items[0]; expect(payload === null || payload === void 0 ? void 0 : payload.payload).toBeTruthy(); expect(payload === null || payload === void 0 ? void 0 : payload.type).toEqual(transports_1.TransportItemType.EXCEPTION); var evt = payload === null || payload === void 0 ? void 0 : payload.payload; expect(evt.type).toEqual('TestError'); expect(evt.value).toEqual('test exception'); expect(evt.stacktrace).toEqual({ frames: frames }); expect(evt.context).toEqual(additionalContext); }); it('error without overrides', function () { var _a, _b; var err = new Error('test'); api.pushError(err); expect(transport.items).toHaveLength(1); var payload = transport.items[0]; expect((_a = payload === null || payload === void 0 ? void 0 : payload.meta.app) === null || _a === void 0 ? void 0 : _a.name).toEqual('test'); expect(payload === null || payload === void 0 ? void 0 : payload.payload).toBeTruthy(); expect(payload === null || payload === void 0 ? void 0 : payload.type).toEqual(transports_1.TransportItemType.EXCEPTION); var evt = payload === null || payload === void 0 ? void 0 : payload.payload; expect(evt.type).toEqual('Error'); expect(evt.value).toEqual('test'); expect(evt.timestamp).toBeTruthy(); var stacktrace = evt.stacktrace; expect(stacktrace).toBeTruthy(); expect(stacktrace === null || stacktrace === void 0 ? void 0 : stacktrace.frames.length).toBeGreaterThan(3); expect((_b = stacktrace === null || stacktrace === void 0 ? void 0 : stacktrace.frames[0]) === null || _b === void 0 ? void 0 : _b.filename).toEqual('Error: test'); }); describe('Filtering', function () { it('filters the same event', function () { var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); api.pushError(error); expect(transport.items).toHaveLength(1); }); it("doesn't filter events with same message and different stacktrace", function () { var error1 = new Error('test'); var error2 = new Error('test'); api.pushError(error1); expect(transport.items).toHaveLength(1); api.pushError(error2); expect(transport.items).toHaveLength(2); }); it("doesn't filter events with other message and same stacktrace", function () { var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); error.message = 'test2'; api.pushError(error); expect(transport.items).toHaveLength(2); }); it("doesn't filter events with same message and same stacktrace but different type", function () { var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); error.name = 'Another Type'; api.pushError(error); expect(transport.items).toHaveLength(2); }); it("filters an event and doesn't filter the next different one", function () { var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); api.pushError(error); expect(transport.items).toHaveLength(1); error.name = 'Another Type'; api.pushError(error); expect(transport.items).toHaveLength(2); }); it("doesn't filter when dedupe is false", function () { var _a; _a = createAPI({ dedupe: false }), api = _a[0], transport = _a[1]; var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); api.pushError(error); expect(transport.items).toHaveLength(2); }); it("doesn't filter when skipDedupe is true", function () { var error = new Error('test'); api.pushError(error); expect(transport.items).toHaveLength(1); api.pushError(error, { skipDedupe: true, }); expect(transport.items).toHaveLength(2); }); it("doesn't filter events with same message, same stacktrace, same type but different context", function () { var error = new Error('test'); api.pushError(error, { context: { foo: 'bar' } }); expect(transport.items).toHaveLength(1); api.pushError(error, { context: { bar: 'baz' } }); expect(transport.items).toHaveLength(2); }); it('uses traceId and spanId from custom context', function () { var _a; var spanContext = { traceId: 'my-trace-id', spanId: 'my-span-id', }; var error = new Error('test'); api.pushError(error, { spanContext: spanContext }); expect(transport.items).toHaveLength(1); expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).trace).toStrictEqual({ trace_id: 'my-trace-id', span_id: 'my-span-id', }); }); it('Sets the timestamp to the provided custom timestamp', function () { var _a; api.pushEvent('test', undefined, undefined, { timestampOverwriteMs: 123 }); expect(transport.items).toHaveLength(1); expect(((_a = transport.items[0]) === null || _a === void 0 ? void 0 : _a.payload).timestamp).toBe('1970-01-01T00:00:00.123Z'); }); }); }); }); //# sourceMappingURL=initialize.test.js.map