rollbar
Version:
Effortlessly track and debug errors in your JavaScript applications with Rollbar. This package includes advanced error tracking features and an intuitive interface to help you identify and fix issues more quickly.
149 lines (128 loc) • 4.25 kB
JavaScript
/* globals expect */
/* globals describe */
/* globals it */
/* globals sinon */
var Telemeter = require('../src/telemetry');
describe('Telemetry()', function () {
it('should have all of the expected methods', function (done) {
var options = {};
var t = new Telemeter(options);
expect(t).to.have.property('copyEvents');
expect(t).to.have.property('capture');
expect(t).to.have.property('captureLog');
expect(t).to.have.property('captureError');
expect(t).to.have.property('captureNetwork');
expect(t).to.have.property('captureEvent');
done();
});
});
describe('capture', function () {
it('should return a valid telemetry event', function (done) {
var options = {};
var t = new Telemeter(options);
var now = +new Date();
var event = t.capture('network', { url: 'a.com' }, 'debug');
expect(event.timestamp_ms - now).to.be.below(500);
expect(event.type).to.equal('network');
expect(event.level).to.equal('debug');
expect(event.body.url).to.equal('a.com');
done();
});
});
describe('captureEvent', function () {
it('should return a valid telemetry event', function (done) {
var t = new Telemeter();
var event = t.captureEvent('log', { message: 'bar' }, 'info');
expect(event.type).to.equal('log');
expect(event.level).to.equal('info');
expect(event.body.message).to.equal('bar');
done();
});
});
describe('filterTelemetry', function () {
it("should filter out events that don't match the test", function (done) {
var options = {
filterTelemetry: function (e) {
return (
e.type === 'network' &&
(e.body.subtype === 'xhr' || e.body.subtype === 'fetch') &&
e.body.url.indexOf('https://spammer.com') === 0
);
},
};
var t = new Telemeter(options);
var evt = t.capture(
'network',
{ url: 'https://spammer.com', subtype: 'xhr' },
'debug',
);
expect(evt).to.be(false);
done();
});
it('should filter out events in copy even if they are modified after capture', function (done) {
var options = {
filterTelemetry: function (e) {
return e.type === 'network' && e.body.statusCode === 200;
},
};
var t = new Telemeter(options);
var evt = t.capture('network', { url: 'https://spammer.com' }, 'debug');
var evt2 = t.capture(
'network',
{ url: 'https://spammer.com', statusCode: 404 },
'debug',
);
expect(evt).not.to.be(false);
expect(evt2).not.to.be(false);
var events = t.copyEvents();
expect(events.length).to.equal(2);
evt.body.statusCode = 200;
events = t.copyEvents();
expect(events.length).to.equal(1);
expect(events[0].body.statusCode).to.equal(404);
done();
});
});
describe('configure', function () {
it('should truncate events to new max', function (done) {
var options = { maxTelemetryEvents: 5 };
var t = new Telemeter(options);
for (var i = 0; i < 7; i++) {
t.capture('network', { url: 'a.com' }, 'debug');
}
expect(t.queue.length).to.equal(5);
t.configure({ maxTelemetryEvents: 3 });
expect(t.queue.length).to.equal(3);
done();
});
it('should lengthen events to allow new max', function (done) {
var options = { maxTelemetryEvents: 3 };
var t = new Telemeter(options);
for (var i = 0; i < 7; i++) {
t.capture('network', { url: 'a.com' }, 'debug');
}
expect(t.queue.length).to.equal(3);
t.configure({ maxTelemetryEvents: 5 });
expect(t.queue.length).to.equal(3);
for (var i = 0; i < 7; i++) {
t.capture('network', { url: 'a.com' }, 'debug');
}
expect(t.queue.length).to.equal(5);
done();
});
it('does not drop existing options that are not passed to configure', function (done) {
var options = { maxTelemetryEvents: 3 };
var t = new Telemeter(options);
for (var i = 0; i < 7; i++) {
t.capture('network', { url: 'a.com' }, 'debug');
}
expect(t.queue.length).to.equal(3);
t.configure({});
expect(t.queue.length).to.equal(3);
for (var i = 0; i < 7; i++) {
t.capture('network', { url: 'a.com' }, 'debug');
}
expect(t.queue.length).to.equal(3);
done();
});
});