diff --git a/lib/analytics.js b/lib/analytics.js index e1cbbbe4..3d9a36c0 100644 --- a/lib/analytics.js +++ b/lib/analytics.js @@ -615,7 +615,11 @@ Analytics.prototype._invoke = function(method, facade) { if (failedInitializations.indexOf(name) >= 0) { self.log('Skipping invokation of .%s method of %s integration. Integation failed to initialize properly.', method, name); } else { - integration.invoke.call(integration, method, facade); + try { + integration.invoke.call(integration, method, facade); + } catch (e) { + self.log('Error invoking .%s method of %s integration: %o', method, name, e); + } } }, this._integrations); diff --git a/test/analytics.test.js b/test/analytics.test.js index ba27d72d..2d490568 100644 --- a/test/analytics.test.js +++ b/test/analytics.test.js @@ -322,6 +322,11 @@ describe('Analytics', function() { assert(!Test.prototype.invoke.called); }); + it('should not crash when invoking integration fails', function() { + Test.prototype.invoke = function() { throw new Error('Uh oh!'); }; + analytics.track('Test Event'); + }); + it('should support .integrations to disable / select integrations', function() { var opts = { integrations: { Test: false } }; analytics.identify('123', {}, opts);