[解決済み] new Date() のようなコンストラクタをモックする方法
質問
あるメソッドが
new Date
に依存して日付オブジェクトを作成し、それを操作するメソッドがあります。 操作が期待通りに動作することをテストしているので、返された日付と期待される日付を比較する必要があります。 これを行うために、私は
new Date
がテストとテストされているメソッドで同じ値を返すことを確認する必要があります。 どのようにそれを行うことができますか?
コンストラクタ関数の戻り値を実際にモック化する方法はありますか?
日付オブジェクトを提供し、モック化できる関数で必要とされるモジュールを作ることはできました。 しかし、それは私のコードでは不必要な抽象化であるように思えます。
テストされる関数の例...
module.exports = {
sameTimeTomorrow: function(){
var dt = new Date();
dt.setDate(dt + 1);
return dt;
}
};
の戻り値をモックするにはどうしたらよいでしょうか?
new Date()
?
どのように解決するのですか?
更新
: この回答は
jest < version 26
を参照してください。
最近のjestのバージョンについては、この回答
.
new Date()のようなコンストラクタをモックするには
jest.spyOn
を使ってモックすることができます。
test('mocks a constructor like new Date()', () => {
console.log('Normal: ', new Date().getTime())
const mockDate = new Date(1466424490000)
const spy = jest
.spyOn(global, 'Date')
.mockImplementation(() => mockDate)
console.log('Mocked: ', new Date().getTime())
spy.mockRestore()
console.log('Restored: ', new Date().getTime())
})
そして、出力は次のようになります。
Normal: 1566424897579
Mocked: 1466424490000
Restored: 1566424897608
参照 GitHubのリファレンスプロジェクト .
注:TypeScriptを使用していて、コンパイルエラーが発生するような場合。
Argument of type '() => Date' is not assignable to parameter of type '() => string'. Type 'Date' is not assignable to type 'string'
. この場合、回避策として
mockdate
ライブラリを使用することです。参照
この質問
をご覧ください。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptの日付の書式設定方法
-
[解決済み] JavaScriptで現在の日付を取得するには?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] JavaScriptで日付の書式設定に関するドキュメントはどこにありますか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ