web-dev-qa-db-fra.com

Quelle est la différence entre les méthodes jest.fn () et jest.spyOn () dans jest?

J'écris les cas de tests unitaires pour mon projet React et j'utilise des plaisanteries et des enzymes pour écrire des cas de tests. J'ai lu la documentation de plaisanterie

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

ce qui explique la méthode jest.spyOn() mais je n'ai pas bien compris.

Je veux donc en savoir plus sur les endroits spécifiques où nous devons utiliser jest.fn() et où nous devons/devons utiliser jest.spyOn(). Ce serait d'une grande aide si on peut l'expliquer avec un exemple pour les deux méthodes.

Merci

11
Pradhumn Sharma

Ma simple compréhension de ces deux fonctions dans les projets React/Frontend est la suivante:

jest.fn()

  • Vous voulez vous moquer d'une fonction et ne vous souciez vraiment pas de l'implémentation d'origine de cette fonction
  • Souvent vous vous moquez juste de la valeur de retour
  • Cela est très utile si vous souhaitez supprimer les dépendances du backend (par exemple lors de l'appel de l'API du backend) ou des bibliothèques tierces dans vos tests
  • Il est également extrêmement utile si vous souhaitez effectuer de vrais tests unitaires . Vous ne vous souciez pas si certaines fonctions appelées par l'unité que vous testez fonctionnent correctement, car cela ne fait pas partie de sa responsabilité.

jest.spyOn()

  • L'implémentation d'origine de la fonction est pertinente pour votre test, mais:
    • Vous souhaitez ajouter votre propre implémentation uniquement pour un scénario spécifique, puis la réinitialiser à nouveau via mockRestore()
    • Vous voulez juste voir si la fonction a été appelée
    • ...
  • Je pense que cela est particulièrement utile pour les tests d'intégration, mais pas uniquement pour eux!

(Bon article de blog: https://medium.com/@rickhanlonii/understanding-jest-mocks-f0046c68e53c )

7
ysfaran

jest.fn() est une méthode pour créer un stub, elle vous permettra de suivre les appels, de définir des valeurs de retour etc ...

jest.spyOn() cam de jasmine, il vous permet de convertir ne méthode existante sur un objet en un espion, qui vous permet également de suivre les appels et de redéfinir l'implémentation de la méthode d'origine.

Ma règle d'or est la suivante: si vous voulez faire d'une implémentation existante un espion, utilisez spyOn si vous construisez une maquette, utilisez fn().

1
felixmosh