aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorIgor Minar2011-10-30 15:11:25 -0700
committerIgor Minar2011-10-31 11:34:25 -0700
commitef875ad0cf4349144cb4674e050dd160564f6dd9 (patch)
tree77b5aaac971cb6a5b2e43504db8886b9877da89b /test
parent615841a5d3cb6dae8329411c27fd938e9b413f4c (diff)
downloadangular.js-ef875ad0cf4349144cb4674e050dd160564f6dd9.tar.bz2
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
Diffstat (limited to 'test')
-rw-r--r--test/ScopeSpec.js28
1 files changed, 24 insertions, 4 deletions
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;}"]]');
});