概要
JavaScriptのユニットテストを実行する場合、Date.now() や new Date() をスタブ化して指定した値を返すようにしたい場合がある。
Date.now() は単にメソッドを置き換えれば良いだけだが、new Date() のスタブは一見迷ってしまうのでここに記録しておく。
TL;DR
var OriginalDate = Date;
Date = function () { return new OriginalDate(2017, 0, 1); };
Date.prototype = OriginalDate.prototype;
説明
-
Date = function () { return new OriginalDate(2017, 0, 1); };でコンストラクタを置き換える - さらにprototypeもコピーすることで、
(new Date()) instanceof Dateされてもtrueを返せる -
Date.now(),Date.UTC(),Date.parse()には対応していないので必要に応じて追加する