組み込みのErrorを拡張したErrorオブジェクトを実装する。
本コンテンツの一部は、業務時間内に調べた内容を含んでおり、株式会社ディー・エヌ・エーの提供でお送りしております。
構成
/ |- MyError.js `- MyError_spec.js
MyError.js
/** * @class * @constructor */ function MyError(message) { Error.call(this, message); if (message !== undefined) { this.message = String(message); } }; MyError.prototype = (function(base) { var Inheritor = function(){}; Inheritor.prototype = base.prototype; return new Inheritor(); })(Error); MyError.prototype.constructor = MyError; MyError.prototype.name = "MyError"; MyError.prototype.message = ""; MyError.prototype.toString = function() { return "[object " + this.name + "]"; }; exports.MyError = MyError;
上記実装だと、instanceofでErrorとMyErrorがそれぞれtrueになる。
MyError_spec.js
jasmine-nodeのspecファイルは下記の通り。
var MyError = require("./MyError").MyError; describe("MyError packages called new", function() { var e; beforeEach(function() { e = new MyError("throw new MyError"); }); it("type of", function() { type = typeof e; expect(type).toEqual("object"); }); it("instance of MyError", function() { expect(e instanceof MyError).toEqual(true); }); it("instance of Error", function() { expect(e instanceof Error).toEqual(true); }); it("throw new MyError", function() { try { throw e; } catch (e) { var name = e.name; var message = e.message; expect(name).toEqual("MyError"); expect(message).toEqual("throw new MyError"); } }); it("toString method", function() { var str = e.toString(); expect(str).toEqual("[object MyError]"); }); });
追記
特になし。