aboutsummaryrefslogtreecommitdiffstats
path: root/test/testabilityPatch.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/testabilityPatch.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/testabilityPatch.js')
-rw-r--r--test/testabilityPatch.js50
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;