6

Quelle est la différence entrePourquoi utiliser spyOn au lieu de jasmine.createSpy?

jasmine.createSpy ('someMethod')

Et

spyOn (someObject, 'SomeMethod')

Et pourquoi devrait-on choisir d'utiliser spyOn?

Je suppose que la première alternative correspondra à la méthode someMethod peu importe dans quel objet elle est contenue mais spyOn ne correspondra que si elle est contenue dans someObject. Ainsi, createSpy est-il juste un matcher plus générique?

+0

hey, a fait [ma réponse] (https://stackoverflow.com/a/45074442/2545680) aide? –

Répondre

11

La différence est que vous devriez avoir une méthode sur l'objet avec spyOn

const o = { some(): { console.log('spied') } }; 
spyOn(o, 'some'); 

alors que la méthode simulée est créée pour votre avec createSpy():

const o = {}; 
o.some = jasmine.createSpy('some'); 

L'avantage du spyOn est que vous pouvez appeler la méthode originale:

spyOn(o, 'some').and.callThrough(); 
o.some(); // logs 'spied' 

Et comme @estus dit la méthode originale est rétablie après le test en cas de spyOn. Cela devrait être fait manuellement quand il est réaffecté avec.

+1

Plus important encore, méthode originale est rétablie après le test en cas de 'spyOn'. Cela devrait être fait manuellement quand il est réaffecté avec 'o.some ='. – estus

+0

@estus, merci pour l'ajout) –

1

De plus à l'autre belle réponse:

  • Utilisez spyOn() pour espionner (interception) une méthode existante sur un objet pour le suivi des appels d'autres modules à elle.
  • Utilisation jasmine.createSpy() pour créer une fonction qui peut être transmis en tant que rappel ou Promise gestionnaire pour suivre les rappels.