Sinon.js - stub Reagiert die Funktion der Komponente, bevor die Komponente instanziiert wird?

8

Nehmen wir an, ich habe eine Komponente, die so aussieht:

%Vor%

In meinem Test könnte ich diese Komponente mit TestUtils darstellen und dann die Methode wie folgt auslassen:

%Vor%

Aber gibt es eine Möglichkeit, dass ich Sinon sagen könnte, dass es die Funktion einer Komponente automatisch ausgibt, wenn eine Instanz dieser Komponente erstellt wird? Ex:

%Vor%

Wenn dies nicht möglich ist, gibt es eine mögliche Lösung, die der gewünschten Funktionalität nahe kommt?

    
Michael Parker 18.06.2015, 15:01
quelle

2 Antworten

3

Ich habe eine Lösung für mein Problem gefunden.

Um zu verdeutlichen, ist mein Problem, dass ich Funktionen ausschließen wollte, die zu untergeordneten Komponenten gehören, die unter einer übergeordneten Komponente gerendert werden. So etwas wie das:

parent.js

%Vor%

child.js

%Vor%

Wenn ich TestUtils zum Rendern von Parent in einem meiner Tests verwenden würde, würde dies den Fehler auslösen, den ich vermeiden wollte. Mein Problem war also, dass ich die Funktion test von Child ausstechen musste, bevor sie instanziiert wurde. Dann, wenn ich Parent rendere, wird Kind nicht explodieren.

Die angegebene Antwort funktionierte nicht ganz, da Parent require() verwendet, um Childs Konstruktor zu erhalten. Ich bin mir nicht sicher, warum, aber deswegen kann ich Childs Prototyp in meinem Test nicht ausstellen und erwarte, dass der Test wie folgt abläuft:

%Vor%

Ich konnte eine Lösung finden, die meinen Bedürfnissen entspricht. Ich wechselte meinen Test-Rahmen von Mocha zu Jasmine, und ich begann, jasmine-react zu verwenden, was einige Vorteile brachte, einschließlich der Fähigkeit eine Funktion einer Klasse auszugeben, bevor sie instanziiert wird. Hier ist ein Beispiel für eine funktionierende Lösung:

%Vor%

Ich hoffe, das hilft jemandem mit einem ähnlichen Problem. Wenn jemand irgendwelche Fragen hat, würde ich froh sein zu helfen.

    
Michael Parker 01.07.2015, 14:10
quelle
13

Sie müssen ExampleComponent.prototype anstelle von ExampleComponent überschreiben. ExampleComponent ist ein Konstruktor. Lokale Methoden wie test() werden in ihrer prototype gespeichert.

%Vor%     
Victor 26.06.2015 11:53
quelle

Tags und Links