Jestのモック関数に対してmockRejectedValueを設定したとき、そのモックを呼び出すと何が返りますか? const fn = jest.fn(); fn.mockRejectedValue(new Error('失敗')); const result = fn();
解説
正解は「指定したErrorでrejectされるPromiseが返る」です。mockRejectedValueは、モック関数が失敗した非同期処理(rejectされたPromise)を返すように設定するためのメソッドです。名前に「Rejected」と入っているとおり、返るのはあくまでPromiseであり、同期的にthrowされるわけでも、Errorがそのまま値として返るわけでもありません。undefinedでresolveされるのは設定をしていないjest.fn()のデフォルト挙動なので、こちらも混同しやすいポイントです。mockRejectedValueは何のために使うのかWeb APIの呼び出しやDBアクセスなど、非同期関数が失敗したときの挙動をテストしたい場面で使います。たとえば「APIがエラーを返したらエラーメッセージを画面に出す」というロジックをテストするとき、実際にサーバーを落とす代わりに、APIを呼ぶ関数をモック化して「必ず失敗する」状態を作ります。const fetchUser = jest.fn(); fetchUser.mockRejectedValue(new Error('Network error')); await expect(fetchUser()).rejects.toThrow('Network error');mockResolvedValueとセットで覚えるmockRejectedValueには対になるmockResolvedValueがあり、こちらは成功した非同期処理をシミュレートします。2つをセットで覚えると、非同期関数のテストが一気に書けるようになります。mockResolvedValue(value): valueでresolveされるPromiseを返す(成功ケース)mockRejectedValue(error): errorでrejectされるPromiseを返す(失敗ケース)どちらも内部的にはmockImplementation(() => Promise.resolve(value))やmockImplementation(() => Promise.reject(error))と書くのと同じで、非同期テストで頻出するパターンを短く書けるようにしたショートカットと捉えると理解しやすいです。「jest 非同期 モック エラー」で検索して出てくる解説の多くは、このmockRejectedValueを使った書き方を前提にしています。