web-dev-qa-db-ja.com

jestのjest.fn()メソッドとjest.spyOn()メソッドの違いは何ですか?

反応プロジェクトのユニットテストケースを作成し、テストケースを作成するためにjestと酵素を使用しています。私はjestのドキュメントを読みました

https://jestjs.io/docs/en/jest-object.html#jestspyonobject-methodname

jest.spyOn()メソッドについて説明していますが、完全には理解できませんでした。

したがって、jest.fn()を使用する必要がある特定の場所とjest.spyOn()を使用する必要がある場所に関する詳細を知りたいのです。両方の方法の例を使用して説明できれば、非常に役立ちます。

ありがとう

11
Pradhumn Sharma

反応/フロントエンドプロジェクトにおけるこれら2つの機能についての私の簡単な理解は次のとおりです。

jest.fn()

  • 関数をモックしたいが、その関数の元の実装は本当に気にしない
  • しばしば単に戻り値をモックします
  • これは、テストでバックエンド(バックエンドAPIを呼び出すときなど)またはサードパーティライブラリへの依存関係を削除する場合に非常に役立ちます。
  • real単体テストを作成する場合にも非常に役立ちます。テストするユニットによって呼び出される特定の関数が適切に機能しているかどうかは、その責任の一部ではないため、気にする必要はありません。

jest.spyOn()

  • 関数の元の実装はテストに関連していますが、
    • 特定のシナリオのためだけに独自の実装を追加し、mockRestore()を介して再度リセットしたい
    • 関数が呼び出されたかどうかを確認するだけです
    • ...
  • これは統合テストに特に役立つと思いますが、それらのためだけではありません

(良いブログ投稿: https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c

7
ysfaran

jest.fn()は、スタブを作成するためのメソッドです。これにより、呼び出しの追跡、戻り値の定義などが可能になります...

jest.spyOn() camジャスミンから、オブジェクトの既存のメソッドをスパイに変換できます。これにより、呼び出しを追跡し、元のメソッドの実装を再定義することもできます。

これに関する私の経験則は、既存の実装をスパイにする場合はspyOnを使用します。モックを作成する場合はfn()を使用します。

1
felixmosh