Jest: SpyOn-Funktionalität

Erstellt am 20. Sept. 2016  ·  3Kommentare  ·  Quelle: facebook/jest

Ich versuche herauszufinden, wie ich den folgenden Anwendungsfall im Scherz am besten angehen kann.

Ich möchte keine Funktion verspotten, sondern einfach ausspionieren und die ursprüngliche Implementierung die Arbeit machen lassen. Nehmen wir an, ich möchte verfolgen, wie oft die Abfrage für den Postgres-Treiber aufgerufen wurde. Folgende Vorgehensweise funktioniert:

const querySpy = pg.Client.prototype.query = jest.fn(pg.Client.prototype.query);
expect(querySpy.mock.calls.length).toBe(2)

Das Problem ist, dass ich am Ende des Tests auch die ursprüngliche Implementierung zuweisen muss, damit andere in derselben Datei nicht beeinträchtigt werden. Es ist also einfach, die Testisolation zu durchbrechen, wenn eine Person eine solche Aufräumung vergisst.

Mir ist auch aufgefallen, dass Jasmin SpyOn hat, das auch im Scherz zu funktionieren scheint (aber nicht dokumentiert), was ziemlich elegant ist, so dass dasselbe erreicht werden kann durch:

const querySpy = spyOn(pg.Client.prototype, 'query').and.callThrough();
expect(querySpy.calls.count()).toEqual(3);

Und Jasmin behauptet, den Spion nach dem Test automatisch zu entfernen, was großartig ist.

Aber nicht sicher, ob das etwas ist, das offiziell Teil des Scherzes wird? Das Problem ist, dass Jasminspione eine andere Benutzeroberfläche haben als Spott im Scherz. Ich denke also, am besten wäre es, einfach die Scheinfunktionalität zu erweitern, damit sie leicht zum Ausspionieren mit spyOn oder ähnlichem verwendet werden kann.

Jedes Feedback ist willkommen.

Hilfreichster Kommentar

Vielleicht falsch, aber unterscheidet sich expect.spyOn nicht von Jasmin spyOn dadurch, dass es am Ende eines Tests nicht die behauptete "automatische Wiederherstellung" durchführt? Ich denke, diese Funktion ist ziemlich ordentlich und räumt die Spezifikationsdateien auf. Wird es Pläne geben, diese Art von Funktionalität bei der Integration von #1679 hinzuzufügen?

Alle 3 Kommentare

Dies wird als Teil von #1679 verfolgt.

Vielleicht falsch, aber unterscheidet sich expect.spyOn nicht von Jasmin spyOn dadurch, dass es am Ende eines Tests nicht die behauptete "automatische Wiederherstellung" durchführt? Ich denke, diese Funktion ist ziemlich ordentlich und räumt die Spezifikationsdateien auf. Wird es Pläne geben, diese Art von Funktionalität bei der Integration von #1679 hinzuzufügen?

Siehe auch #2534.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen