Ich bin neu bei Jasmine und habe gerade angefangen, es zu benutzen. Ich habe eine Bibliothek js-Datei mit vielen Funktionen, die keinem Objekt zugeordnet sind (dh global sind). Wie spioniere ich diese Funktionen aus?
Ich habe versucht, Fenster / Dokument als Objekt zu verwenden, aber der Spion hat nicht funktioniert, obwohl die Funktion aufgerufen wurde. Ich habe auch versucht, es wie folgt in ein gefälschtes Objekt zu wickeln:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
und testen mit
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Dies funktioniert auch nicht, da der Spion nicht funktioniert hat
quelle
test = jasmine.createSpy();
, um eckige auszuspionieren$anchroScroll
funktionierte perfekt$window.open(url, '_blank');
mit der Absicht, einen neuen Tab (oder ein neues Fenster, je nach Browser-Setup) zu öffnen. Wie soll ich sicherstellen, dass diese Funktion aufgerufen wird und überprüft wird, ob unabhängig vom Browser zur richtigen URL navigiert wird?TypeScript-Benutzer:
Ich weiß, dass das OP nach Javascript gefragt hat, aber für alle TypeScript-Benutzer, die darauf stoßen und eine importierte Funktion ausspionieren möchten, können Sie Folgendes tun.
Konvertieren Sie in der Testdatei den Import der Funktion wie folgt:
Dazu:
Dann kannst du ausspionieren
FooFunctions.foo
:)quelle
export const FooFunctions = { bar, foo };
und der Import im Test zu wird.import { FooFunctions } from '../foo_functions'.
Der Alias muss jedoch weiterhin explizit in der privaten Implementierung von foo_functions verwendet werden, damit der Spion funktioniert.const result = FooFunctions.foo(params)
// Spion meldet Anrufconst result = foo(params)
// Spion meldet keinen AnrufError: <spyOn> : parseCookie is not declared writable or has no setter
Es gibt 2 Alternativen, die ich benutze (für Jasmin 2)
Dieser ist nicht ganz explizit, weil es scheint, dass die Funktion tatsächlich eine Fälschung ist.
Die zweite ausführlicher, expliziter und "sauberer":
-> Jasmin-Quellcode , um das zweite Argument zu sehen
quelle
Ein sehr einfacher Weg:
quelle
Das hat bei mir funktioniert.
quelle
Meine Antwort unterscheidet sich geringfügig von @FlavorScape darin, dass ich im importierten Modul eine einzige (Standardexport-) Funktion hatte. Ich habe Folgendes getan:
quelle