Saya mengganti korek api toThrow Jasmine dengan yang berikut, yang memungkinkan Anda mencocokkan pada properti nama pengecualian atau properti pesannya. Bagi saya ini membuat tes lebih mudah untuk ditulis dan kurang rapuh, karena saya dapat melakukan hal berikut:
throw {
name: "NoActionProvided",
message: "Please specify an 'action' property when configuring the action map."
}
dan kemudian uji dengan yang berikut ini:
expect (function () {
.. do something
}).toThrow ("NoActionProvided");
Ini memungkinkan saya mengubah pesan pengecualian nanti tanpa melanggar tes, ketika yang penting adalah bahwa itu melemparkan jenis pengecualian yang diharapkan.
Ini adalah pengganti toThrow yang memungkinkan ini:
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