Ich versuche, ein React Komponentenverfahren zu Testzwecken Stummel:Stubbing ein Verfahren Reagieren Komponente mit Sinon
var Comp = React.createClass({
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div(null, "foo");
}
});
var stub = sinon.stub(Comp.type.prototype, "plop");
React.addons.TestUtils.renderIntoDocument(Comp());
sinon.assert.called(stub); // throws
Diese traurig Druck „Plopp“ auf der Konsole hält ... und die Behauptung fehlschlägt.
Hinweis: Direktes Stubben der Spec-Objekt-Methode funktioniert, aber dann müssen Sie den Komponentenkonstruktor und die Spezifikation separat exportieren, so dass sie beide in Tests verfügbar sind ... Außerdem müssten Sie die Spezifikation vor dem Erstellen der Komponentenklasse; nicht so bequem:
var CompSpec = {
displayName: "Comp",
plop: function() {
console.log("plop");
},
render: function() {
this.plop();
return React.DOM.div("foo");
}
};
var stub = sinon.stub(CompSpec, "plop");
var Comp = React.createClass(CompSpec);
React.addons.TestUtils.renderIntoDocument(Comp());
// plop() is properly stubbed, so you can
sinon.assert.called(stub); // pass
Können Sie sich eine andere Strategie ein leicht Stummel Komponentenmethode reagieren?
per http://stackoverflow.com/questions/8825870/sinon-js-attempted-to-wrap-ajax-which-isready binden -wrapped Ich muss dann die Wrapped-Funktionen wiederherstellen, wenn ich sie in einem anderen Test erneut einpacken möchte. Die Antwort dort funktioniert nicht. Wie würdest du das hier mit deiner Lösung machen? – YPCrumble
@YPCrumble - Sie könnten die ursprüngliche Funktion einer Variable im beforeEach zuweisen, dann den Stub wie oben und dann die ursprüngliche Funktion auf die Variable zurücksetzen, der Sie im beforeEach zugewiesen haben. var originalFunc; before (function() { originalFunc = Comp.type.prototype .__ reactAutoBindMap.plop; var stub = sinon.stub (Comp.type.prototype .__ reactAutoBindMap "Plopp"); React.addons.TestUtils. renderIntoDocument (React.createElement (Comp)); sinon.assert.genannt (stub); // übergibt }); afterEach (Funktion() { Comp.type.prototype .__ reactAutoBindMap.plop = originalFunc; }); – alengel
@danvk Ich glaube, das ist jetzt mit React v15 veraltet - irgendwelche Vorschläge, was Sie weiter verwenden? – YPCrumble