diff --git a/common/static/js/spec/logger_spec.js b/common/static/js/spec/logger_spec.js index 37e41c7a74..b492bed370 100644 --- a/common/static/js/spec/logger_spec.js +++ b/common/static/js/spec/logger_spec.js @@ -49,7 +49,7 @@ Logger.listen('new_event', null, this.callbacks[3]); }); - it('can listen events when the element name is unknown', function() { + it('can listen to events when the element name is unknown', function() { Logger.log('example', 'data'); expect(this.callbacks[0]).toHaveBeenCalledWith('example', 'data', null); expect(this.callbacks[1]).toHaveBeenCalledWith('example', 'data', null); @@ -57,13 +57,24 @@ expect(this.callbacks[3]).not.toHaveBeenCalled(); }); - it('can listen events when the element name is known', function() { + it('can listen to events when the element name is known', function() { Logger.log('example', 'data', 'element'); expect(this.callbacks[0]).not.toHaveBeenCalled(); expect(this.callbacks[1]).not.toHaveBeenCalled(); expect(this.callbacks[2]).toHaveBeenCalledWith('example', 'data', 'element'); expect(this.callbacks[3]).not.toHaveBeenCalled(); }); + + it('can catch exceptions', function() { + var callback = function () { + Logger.log('exception', 'data'); + }; + Logger.listen('exception', null, function () { + throw new Error(); + }); + expect(callback).not.toThrow(); + expect(jQuery.ajaxWithPrefix).toHaveBeenCalled(); + }); }); describe('bind', function() { diff --git a/common/static/js/src/logger.js b/common/static/js/src/logger.js index 2495358e45..c9412e872e 100644 --- a/common/static/js/src/logger.js +++ b/common/static/js/src/logger.js @@ -39,7 +39,16 @@ // Make the callbacks. callbacks = listeners[eventType][element]; $.each(callbacks, function(index, callback) { - callback(eventType, data, element); + try { + callback(eventType, data, element); + } catch (err) { + console.error({ + eventType: eventType, + data: data, + element: element, + error: err + }); + } }); } }