Jestem nowy w Jasmine i właśnie zacząłem go używać. Mam plik js biblioteki z wieloma funkcjami, które nie są powiązane z żadnym obiektem (tj. Są globalne). Jak mam szpiegować te funkcje?
Próbowałem użyć okna / dokumentu jako obiektu, ale szpieg nie działał, mimo że funkcja została wywołana. Próbowałem też owinąć go w fałszywy przedmiot w następujący sposób:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
i przetestuj z
expect(fakeElement.fakeMethod).toHaveBeenCalled();
To też nie działa, ponieważ szpieg nie działał
źródło
test = jasmine.createSpy();
szpiegował angularJs$anchroScroll
działał idealnie$window.open(url, '_blank');
z zamiarem otwarcia nowej karty (lub okna w zależności od ustawień przeglądarki). Jak mam się upewnić, że wywołuje tę funkcję i sprawdza, czy przechodzi do właściwego adresu URL niezależnie od przeglądarki?Użytkownicy języka TypeScript:
Wiem, że OP pytał o javascript, ale dla wszystkich użytkowników TypeScript, którzy zetkną się z tym, którzy chcą szpiegować zaimportowaną funkcję, oto co możesz zrobić.
W pliku testowym przekonwertuj import funkcji z tego:
Do tego:
Wtedy możesz szpiegować
FooFunctions.foo
:)źródło
export const FooFunctions = { bar, foo };
a import w teście stanie sięimport { FooFunctions } from '../foo_functions'.
Jednak alias nadal musi być jawnie używany w prywatnej implementacji foo_functions, aby szpieg mógł działać.const result = FooFunctions.foo(params)
// raporty szpiegowskie dzwoniąconst result = foo(params)
// raporty szpiegów nie dzwoniąError: <spyOn> : parseCookie is not declared writable or has no setter
Są 2 alternatywy, których używam (dla jaśminu 2)
Ten nie jest do końca jasny, ponieważ wygląda na to, że funkcja jest w rzeczywistości fałszywa.
Drugi, bardziej szczegółowy, wyraźniejszy i „czystszy”:
-> kod źródłowy jasmine, aby zobaczyć drugi argument
źródło
Bardzo prosty sposób:
źródło
To zadziałało dla mnie.
źródło
Moja odpowiedź różni się nieco od @FlavorScape, ponieważ w zaimportowanym module miałem jedną (domyślną) funkcję eksportu, wykonałem następujące czynności:
źródło