mockReturnValue()とmockResolvedValue()
mockReturnValue()とmockResolvedValue()で勘違いしていたことがあったので書いておく
// モックがPromise<void>を返すようにしておく
mockfn.mockReturnValue(Promise.resolve());
mockfnがrejectを返すケースを確認したいと思い以下のようにした
mockfn.mockRejectedValueOnce();
ここで勘違いしていて、
mockRejectedValueOnce()は一度呼ぶ時にデフォルトで設定しているほうではなく、こちらのモックの結果を優先してくれると思っていた
実際は、
mockReturnValue()
はmockReturnValueOnce()
で、
mockResolvedValue()
mockRejectedValue()
は mockResolvedValueOnce()
mockRejectedValueOnce()
で
一度呼んだ時にOnceで設定している値を返して、そのあとはデフォルトを返すようになる
デフォルトで返すのがmockReturnValue()
のときは、一度呼んだときに返すものを設定するのはmockReturnValueOnce()
でないとできない
こんな感じ
const mockfn = jest.fn();
mockfn.mockReturnValue(1);
mockfn.mockReturnValueOnce(2);
mockfn() // 2
mockfn() // 1
mockfn.mockResolvedValue(1);
mockfn.mockResolvedValueOnce(2);
await mockfn() // 2
await mockfn() // 1
mockfn.mockReturnValue(Promise.resolve(1));
mockfn.mockResolvedValueOnce(2);
await mockfn() // 1
await mockfn() // 1
そもそもなぜmockReturnValue
とmockResolvedValue
を混在しようとしたのかと過去の自分になんで??と思ったけれど
こういう仕組みになっているんだということがわかってよかった
どうしてもmockReturnValue
にしていたものをmockResolvedValue
にしたい場合はmockfn.mockReset()
を使ってmockfn.mock
を置き換えるようにする
Author And Source
この問題について(mockReturnValue()とmockResolvedValue()), 我々は、より多くの情報をここで見つけました https://qiita.com/reika_sato/items/a909f1b27914f240bde4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .