6

Was ist der Unterschied zwischenWarum spyOn anstelle von jasmine.createSpy verwenden?

jasmine.createSpy ('somemethod')

Und

spyOn (Someobject, 'Somemethod')

Und warum ist sollte man SpyOn benutzen?

Meine Vermutung ist, dass die erste Alternative der Methode someMethod entspricht, egal in welchem ​​Objekt sie enthalten ist, aber spyOn wird nur zusammenpassen, wenn sie in someObject enthalten ist. Somit ist createSpy einfach ein generischer Matcher?

+0

hey, hat [meine Antwort] (https://stackoverflow.com/a/45074442/2545680) Hilfe? –

Antwort

11

Der Unterschied besteht darin, dass Sie eine Methode für das Objekt mit spyOn

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

während die Mock-Methode mit createSpy() für Ihre erstellt haben sollte:

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

Der Vorteil der spyOn ist, dass Sie können die ursprüngliche Methode aufrufen:

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

Und wie @estus sagt, wird die ursprüngliche Methode nach dem Test im Fall von spyOn wiederhergestellt. Dies sollte manuell durchgeführt werden, wenn es neu zugewiesen wird.

+1

Noch wichtiger ist, Original-Methode wird nach dem Test im Falle von 'SpyOn' wiederhergestellt. Dies sollte manuell geschehen, wenn es mit o.some = 'neu zugewiesen wird. – estus

+0

@estus, danke für die Ergänzung) –

1

Zusätzlich zur anderen feinen Antwort:

  • Verwenden spyOn() auszuspionieren (Intercept) eine bestehende Methode für ein Objekt Anrufe von anderen Modulen, um es zu verfolgen.
  • Verwenden Sie jasmine.createSpy(), um eine Funktion zu erstellen, die als Callback oder Promise-Handler übergeben werden kann, um Rückrufe zu verfolgen.
Verwandte Themen