diff options
| author | Igor Minar | 2011-01-25 20:44:44 -0800 | 
|---|---|---|
| committer | Igor Minar | 2011-01-26 15:46:05 -0800 | 
| commit | f5d08963b0c836b10133a94d03a81254242661eb (patch) | |
| tree | 14c525d0aa22193e5b1a1f8aa791b96608dc83b2 /test/BinderSpec.js | |
| parent | 7a48ee6aa949e8d4338033de8a0c6a079ceb17a3 (diff) | |
| download | angular.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.js | 16 | 
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(){ | 
