Posted at

new Date() のスタブを作る

More than 1 year has passed since last update.


概要

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