2017-07-13 69 views
6

Jaka jest różnica międzyDlaczego warto używać spyOn zamiast jaśminu.createSpy?

jasmine.createSpy ('SomeMethod')

I

spyOn (someObject 'SomeMethod')

i dlaczego czy należy wybrać spyOn?

Domyślam się, że pierwsza alternatywa będzie pasować do metody someMethod, bez względu na to, jaki obiekt jest zawarty, ale spyOn będzie pasował tylko jeśli jest zawarty w someObject. W ten sposób tworzenie programu createSpy jest bardziej uniwersalnym narzędziem dopasowującym?

+0

hej, czy [moja odpowiedź] (https://stackoverflow.com/a/45074442/2545680) pomógł? –

Odpowiedz

11

Różnica polega na tym, że trzeba mieć metodę na obiekcie z spyOn

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

natomiast metoda makiety jest stworzony dla swego createSpy():

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

Zaletą spyOn jest to, że możesz zadzwonić do oryginalnej metody:

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

I jak @estus mówi, że oryginalna metoda jest przywracana po teście w przypadku spyOn. Należy to zrobić ręcznie po ponownym przypisaniu.

+1

Co ważniejsze, oryginalna metoda jest przywracana po teście w przypadku 'spyOn'. Należy to zrobić ręcznie, gdy zostanie ponownie przypisane przez 'o.some ='. – estus

+0

@estus, dzięki za dodanie) –

1

Dodatkowo do innego drobnego odpowiedź:

  • Zastosowanie spyOn() szpiegować (przecięcia) istniejąca metoda na obiekcie do śledzenia połączeń z innymi modułami do niej.
  • Użyj funkcji jasmine.createSpy(), aby utworzyć funkcję, która może zostać przekazana jako funkcja oddzwaniania lub procedura obsługi Promise do śledzenia oddzwaniania.