From 2b90ef16942496e78b6b97cd4814f1b84db27164 Mon Sep 17 00:00:00 2001 From: Vojta Jina Date: Fri, 24 May 2013 15:55:11 -0700 Subject: test(matchers): update toThrow matcher --- test/matchers.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/matchers.js b/test/matchers.js index 3630c3b1..8e4be118 100644 --- a/test/matchers.js +++ b/test/matchers.js @@ -151,3 +151,38 @@ beforeEach(function() { }); }); + + +// TODO(vojta): remove this once Jasmine in Karma gets updated +// https://github.com/pivotal/jasmine/blob/c40b64a24c607596fa7488f2a0ddb98d063c872a/src/core/Matchers.js#L217-L246 +// This toThrow supports RegExps. +jasmine.Matchers.prototype.toThrow = function(expected) { + var result = false; + var exception, exceptionMessage; + if (typeof this.actual != 'function') { + throw new Error('Actual is not a function'); + } + try { + this.actual(); + } catch (e) { + exception = e; + } + + if (exception) { + exceptionMessage = exception.message || exception; + result = (isUndefined(expected) || this.env.equals_(exceptionMessage, expected.message || expected) || (jasmine.isA_("RegExp", expected) && expected.test(exceptionMessage))); + } + + var not = this.isNot ? "not " : ""; + var regexMatch = jasmine.isA_("RegExp", expected) ? " an exception matching" : ""; + + this.message = function() { + if (exception) { + return ["Expected function " + not + "to throw" + regexMatch, expected ? expected.message || expected : "an exception", ", but it threw", exceptionMessage].join(' '); + } else { + return "Expected function to throw an exception."; + } + }; + + return result; +}; -- cgit v1.2.3