Ich ersetze Jasmines toThrow-Matcher durch den folgenden, mit dem Sie die Namenseigenschaft oder die Nachrichteneigenschaft der Ausnahme abgleichen können. Für mich macht dies das Schreiben von Tests einfacher und weniger spröde, da ich Folgendes tun kann:
throw {
name: "NoActionProvided",
message: "Please specify an 'action' property when configuring the action map."
}
und dann mit folgendem testen:
expect (function () {
.. do something
}).toThrow ("NoActionProvided");
Auf diese Weise kann ich die Ausnahmemeldung später optimieren, ohne die Tests zu unterbrechen, wenn es darauf ankommt, dass der erwartete Ausnahmetyp ausgelöst wird.
Dies ist der Ersatz für toThrow, der dies ermöglicht:
jasmine.Matchers.prototype.toThrow = function(expected) {
var result = false;
var exception;
if (typeof this.actual != 'function') {
throw new Error('Actual is not a function');
}
try {
this.actual();
} catch (e) {
exception = e;
}
if (exception) {
result = (expected === jasmine.undefined || this.env.equals_(exception.message || exception, expected.message || expected) || this.env.equals_(exception.name, expected));
}
var not = this.isNot ? "not " : "";
this.message = function() {
if (exception && (expected === jasmine.undefined || !this.env.equals_(exception.message || exception, expected.message || expected))) {
return ["Expected function " + not + "to throw", expected ? expected.name || expected.message || expected : " an exception", ", but it threw", exception.name || exception.message || exception].join(' ');
} else {
return "Expected function to throw an exception.";
}
};
return result;
};
Function.bind
: stackoverflow.com/a/13233194/294855