sinon Spion auf Standalone-Funktion

9

Wenn ich Sinon für eine Funktion in einem Objekt verwende, funktioniert es:

%Vor%

Ich weiß jedoch nicht warum, wenn ich Sinon für eine eigenständige Funktion wie folgt verwende:

%Vor%

Die Assertion schlägt fehl.

    
giangnn 31.08.2015, 22:58
quelle

3 Antworten

3

Sie waren irgendwie auf dem richtigen Weg, aber abgewichen. Lassen Sie uns Ihre Bemühungen durchgehen und die Dinge richtig machen:

%Vor%

Dann an diesem Punkt spiedMyFunc Wraps myFunc . Daher sollte der Aufruf von spiedMyFunc() meist auf das gleiche Ergebnis wie das Aufrufen von myFunc() sein. In der Zwischenzeit spiedMyFunc zusätzlich

  

zeichnet Argumente, diesen Wert, Ausnahmen und Rückgabewerte für alle auf   Anrufe.

Der Rest des Code-Snippets sollte also wie folgt aussehen:

%Vor%

Und so spionieren Sie eine eigenständige Funktion aus. Es macht jedoch keinen konzeptionellen Sinn, eine Standalone Funktion zu stubben.

Beantworten Sie @charlesdeb in einem Kommentar zu dieser Antwort:

Wenn eine Methode aufgerufen wird, kann sie eine Kette auslösen, die implizit andere Methoden aufruft. Aufgrund dieser impliziten oder indirekten Aufrufe möchten Sie möglicherweise steuern, wie sich andere Methoden in der Kette verhalten , während das Verhalten einer bestimmten Methode studieren. * Stubbing * ist ein Mittel, um diese Kontrolle zu realisieren.

Bei der Arbeit mit Funktionen ist es sinnvoll, dem funktionalen Paradigma zu folgen, um Dinge einfach und zuverlässig zu machen. Bedenken Sie Folgendes:

%Vor%

Beim Testen von b ist es notwendig und ausreichend zu beweisen, dass die Ausführung von b() wiederum a() ausgeführt hat. Aber mit der Art, wie b implementiert wurde, ist es unmöglich zu überprüfen, dass a aufgerufen wurde.

Wenn wir jedoch das funktionale Paradigma anwenden, sollten wir

haben %Vor%

Folglich können wir einen einfachen Test wie folgt schreiben:

%Vor%

Wenn Sie stub a möchten, dann erstellen Sie anstelle eines Spions mit dem echten a Ihren bevorzugten Stub.

%Vor%     
Igwe Kalu 23.08.2017 21:43
quelle
0

Ich bin mir nicht sicher, ob es eine Lösung auf der Seite des Browsers gibt.

Aber wenn Sie es in der node.js-Umgebung ausführen, können Sie die Funktion exportieren und in einer anderen Datei testen.

Beispiel: Ihre Quelldatei ist source.js und die Testdatei ist test.js

In source.js

%Vor%

In test.js

%Vor%

Hoffe das kann dir helfen.

    
Yu Huang 26.05.2017 17:25
quelle
-2

Ihr erstes Beispiel funktioniert nicht so gut. Es ist derzeit nicht möglich, einen Stub aus der Standalone-Funktion zu erstellen. Sie können die Methode des Objekts stubben:

%Vor%

Wenn Sie jedoch eine Methode oder Funktion ausspionieren möchten, sollten Sie einen Spion (anstelle eines Stubs) erstellen:

Spion Methode:

%Vor%

Spion auf Standalone-Funktion:

%Vor%

Beachten Sie, dass sinon.spy(myFunc) die ursprüngliche Funktion nicht verändert, sondern nur einen Spion zurückgibt.

    
madox2 19.03.2016 10:58
quelle

Tags und Links