概要
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()
には対応していないので必要に応じて追加する