aboutsummaryrefslogtreecommitdiffstats
path: root/test/BinderSpec.js
diff options
context:
space:
mode:
authorIgor Minar2011-01-25 20:44:44 -0800
committerIgor Minar2011-01-26 15:46:05 -0800
commitf5d08963b0c836b10133a94d03a81254242661eb (patch)
tree14c525d0aa22193e5b1a1f8aa791b96608dc83b2 /test/BinderSpec.js
parent7a48ee6aa949e8d4338033de8a0c6a079ceb17a3 (diff)
downloadangular.js-f5d08963b0c836b10133a94d03a81254242661eb.tar.bz2
split mocks and create $log and $exceptionHandler mocks
- split mocks between angular-mocks.js and mocks.js - src/angular-mocks.js now contains only mocks that we want to ship - test/mocks.js contains mocks that we use internally for testing angular - created angular.mock namespace - created public $exceptionHandler mock rethrows errors - created public $log mock stores all logs messages in an array that can be accessed to make assertions - internally we now have factory to create $exceptionHandler that we can assert on - internally we also keep track of all messages logged and fail tests if messages were not expected and cleaned up (checked via global beforeEach and afterEach) - updated RakeFile and docs reader.js to point to the new angular-mocks.js location - made real $exceptionHandler and $log factories accessible from tests and simplified their specs - fixed typos in several spec descriptions - added log assertions throughout the test suite
Diffstat (limited to 'test/BinderSpec.js')
-rw-r--r--test/BinderSpec.js16
1 files changed, 13 insertions, 3 deletions
diff --git a/test/BinderSpec.js b/test/BinderSpec.js
index f12c1a74..73650bd6 100644
--- a/test/BinderSpec.js
+++ b/test/BinderSpec.js
@@ -273,6 +273,7 @@ describe('Binder', function(){
it('IfTextBindingThrowsErrorDecorateTheSpan', function(){
var a = this.compile('<div>{{error.throw()}}</div>');
var doc = a.node;
+ var errorLogs = a.scope.$service('$log').error.logs;
a.scope.$set('error.throw', function(){throw "ErrorMsg1";});
a.scope.$eval();
@@ -280,6 +281,7 @@ describe('Binder', function(){
assertTrue(span.hasClass('ng-exception'));
assertTrue(!!span.text().match(/ErrorMsg1/));
assertTrue(!!span.attr('ng-exception').match(/ErrorMsg1/));
+ assertEquals(['ErrorMsg1'], errorLogs.shift());
a.scope.$set('error.throw', function(){throw "MyError";});
a.scope.$eval();
@@ -287,30 +289,34 @@ describe('Binder', function(){
assertTrue(span.hasClass('ng-exception'));
assertTrue(span.text(), span.text().match('MyError') !== null);
assertEquals('MyError', span.attr('ng-exception'));
+ assertEquals(['MyError'], errorLogs.shift());
a.scope.$set('error.throw', function(){return "ok";});
a.scope.$eval();
assertFalse(span.hasClass('ng-exception'));
assertEquals('ok', span.text());
assertEquals(null, span.attr('ng-exception'));
+ assertEquals(0, errorLogs.length);
});
it('IfAttrBindingThrowsErrorDecorateTheAttribute', function(){
var a = this.compile('<div attr="before {{error.throw()}} after"></div>');
var doc = a.node;
+ var errorLogs = a.scope.$service('$log').error.logs;
a.scope.$set('error.throw', function(){throw "ErrorMsg";});
a.scope.$eval();
assertTrue('ng-exception', doc.hasClass('ng-exception'));
assertEquals('"ErrorMsg"', doc.attr('ng-exception'));
assertEquals('before "ErrorMsg" after', doc.attr('attr'));
+ assertEquals(['ErrorMsg'], errorLogs.shift());
a.scope.$set('error.throw', function(){ return 'X';});
a.scope.$eval();
assertFalse('!ng-exception', doc.hasClass('ng-exception'));
assertEquals('before X after', doc.attr('attr'));
assertEquals(null, doc.attr('ng-exception'));
-
+ assertEquals(0, errorLogs.length);
});
it('NestedRepeater', function(){
@@ -447,6 +453,7 @@ describe('Binder', function(){
var error = input.attr('ng-exception');
assertTrue(!!error.match(/MyError/));
assertTrue("should have an error class", input.hasClass('ng-exception'));
+ assertTrue(!!c.scope.$service('$log').error.logs.shift()[0].message.match(/MyError/));
// TODO: I think that exception should never get cleared so this portion of test makes no sense
//c.scope.action = noop;
@@ -491,7 +498,7 @@ describe('Binder', function(){
it('FillInOptionValueWhenMissing', function(){
var c = this.compile(
- '<select><option selected="true">{{a}}</option><option value="">{{b}}</option><option>C</option></select>');
+ '<select name="foo"><option selected="true">{{a}}</option><option value="">{{b}}</option><option>C</option></select>');
c.scope.$set('a', 'A');
c.scope.$set('b', 'B');
c.scope.$eval();
@@ -569,18 +576,21 @@ describe('Binder', function(){
assertChild(5, false);
});
- it('ItShouldDisplayErrorWhenActionIsSyntacticlyIncorect', function(){
+ it('ItShouldDisplayErrorWhenActionIsSyntacticlyIncorrect', function(){
var c = this.compile('<div>' +
'<input type="button" ng:click="greeting=\'ABC\'"/>' +
'<input type="button" ng:click=":garbage:"/></div>');
var first = jqLite(c.node[0].childNodes[0]);
var second = jqLite(c.node[0].childNodes[1]);
+ var errorLogs = c.scope.$service('$log').error.logs;
browserTrigger(first, 'click');
assertEquals("ABC", c.scope.greeting);
+ expect(errorLogs).toEqual([]);
browserTrigger(second, 'click');
assertTrue(second.hasClass("ng-exception"));
+ expect(errorLogs.shift()[0]).toMatchError(/Parse Error: Token ':' not a primary expression/);
});
it('ItShouldSelectTheCorrectRadioBox', function(){