From ef875ad0cf4349144cb4674e050dd160564f6dd9 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Sun, 30 Oct 2011 15:11:25 -0700 Subject: feat(scope): better logging of infinite digest error Feedback team has often problems debugging inifinite digest errors, this change should reveal info about what watchers are causing the infinite loop --- test/ScopeSpec.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'test/ScopeSpec.js') diff --git a/test/ScopeSpec.js b/test/ScopeSpec.js index b1942646..e1f8181e 100644 --- a/test/ScopeSpec.js +++ b/test/ScopeSpec.js @@ -218,14 +218,34 @@ describe('Scope', function() { }); - it('should prevent infinite recursion', function() { - root.$watch('a', function(self, v){self.b++;}); - root.$watch('b', function(self, v){self.a++;}); + it('should prevent infinite recursion and print watcher expression', function() { + root.$watch('a', function(self){self.b++;}); + root.$watch('b', function(self){self.a++;}); root.a = root.b = 0; expect(function() { root.$digest(); - }).toThrow('100 $digest() iterations reached. Aborting!'); + }).toThrow('100 $digest() iterations reached. Aborting!\n'+ + 'Watchers fired in the last 5 iterations: ' + + '[["a","b"],["a","b"],["a","b"],["a","b"],["a","b"]]'); + }); + + + it('should prevent infinite recurcion and print print watcher function name or body', + function() { + root.$watch(function watcherA() {return root.a;}, function(self){self.b++;}); + root.$watch(function() {return root.b;}, function(self){self.a++;}); + root.a = root.b = 0; + + expect(function() { + root.$digest(); + }).toThrow('100 $digest() iterations reached. Aborting!\n'+ + 'Watchers fired in the last 5 iterations: ' + + '[["fn: watcherA","fn: function () {return root.b;}"],'+ + '["fn: watcherA","fn: function () {return root.b;}"],'+ + '["fn: watcherA","fn: function () {return root.b;}"],'+ + '["fn: watcherA","fn: function () {return root.b;}"],'+ + '["fn: watcherA","fn: function () {return root.b;}"]]'); }); -- cgit v1.2.3