मैं निम्नलिखित के साथ जैस्मीन के टूथो मैचर की जगह लेता हूं, जो आपको अपवाद की संपत्ति या उसकी संदेश संपत्ति पर मेल खाने देता है। मेरे लिए यह लिखना आसान है और कम भंगुर है, जैसा कि मैं निम्नलिखित कर सकता हूं:
throw {
name: "NoActionProvided",
message: "Please specify an 'action' property when configuring the action map."
}
और फिर निम्नलिखित के साथ परीक्षण करें:
expect (function () {
.. do something
}).toThrow ("NoActionProvided");
यह मुझे अपवाद संदेश को बाद में परीक्षणों को तोड़ने के बिना, जब महत्वपूर्ण बात यह है कि यह अपवाद के अपेक्षित प्रकार को फेंक देता है।
यह है कि यह अनुमति देता है के लिए यह प्रतिस्थापन है:
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