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/testabilityPatch.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/testabilityPatch.js')
| -rw-r--r-- | test/testabilityPatch.js | 50 | 
1 files changed, 49 insertions, 1 deletions
| diff --git a/test/testabilityPatch.js b/test/testabilityPatch.js index 7029b213..78cb767f 100644 --- a/test/testabilityPatch.js +++ b/test/testabilityPatch.js @@ -59,11 +59,59 @@ beforeEach(function(){        return this.actual.hasClass ?                this.actual.hasClass(clazz) :                jqLite(this.actual).hasClass(clazz); +    }, + +    toEqualError: function(message) { +      this.message = function() { +        var expected; +        if (this.actual.message && this.actual.name == 'Error') { +          expected = toJson(this.actual.message); +        } else { +          expected = toJson(this.actual); +        } +        return "Expected " + expected + " to be an Error with message " + toJson(message); +      } +      return this.actual.name == 'Error' && this.actual.message == message; +    }, + +    toMatchError: function(messageRegexp) { +      this.message = function() { +        var expected; +        if (this.actual.message && this.actual.name == 'Error') { +          expected = toJson(this.actual.message); +        } else { +          expected = toJson(this.actual); +        } +        return "Expected " + expected + " to match an Error with message " + toJson(messageRegexp); +      } +      return this.actual.name == 'Error' && messageRegexp.test(this.actual.message);      }    }); + +  $logMock.log.logs = []; +  $logMock.warn.logs = []; +  $logMock.info.logs = []; +  $logMock.error.logs = [];  }); -afterEach(clearJqCache); +afterEach(function() { +  // check $log mock +  forEach(['error', 'warn', 'info', 'log'], function(logLevel) { +    if ($logMock[logLevel].logs.length) { +      forEach($logMock[logLevel].logs, function(log) { +        forEach(log, function deleteStack(logItem) { +          if (logItem instanceof Error) delete logItem.stack; +        }); +      }); + +      throw new Error("Exprected $log." + logLevel + ".logs array to be empty. " + +        "Either a message was logged unexpectedly, or an expected log message was not checked " + +        "and removed. Array contents: " + toJson($logMock[logLevel].logs)); +    } +  }); + +  clearJqCache(); +});  function clearJqCache(){    var count = 0; | 
