Die Idee hier, wenn ich richtig verstehe, ist, dass Sie eine Funktion Stub sind versucht, bevor eine Komponente gerendert in Ihrem Test. In Ihrem Fall wird componentWillMount
nur einmal im Lebenszyklus einer Komponente aufgerufen, unmittelbar bevor die Komponente gerendert wird. So können Sie nicht nur die Komponente und dann die Funktion ausgeben, es muss getan werden, bevor das Rendern auftritt.
wir diese Komponenten zum Beispiel nehmen:
parent.js
var Child = require('./child.js');
var Parent = React.createClass({
render : function() {
return (
<div className="parent">
<Child/>
</div>
);
}
});
module.exports = Parent;
child.js
var Child = React.createClass({
test : function() {
return true;
},
render : function() {
if (this.test) {
throw('boom');
}
return (
<div className="child">
Child
</div>
);
}
});
module.exports = Child;
Hier wollen wir die test
Funktion Stub bevor unsere Child-Komponente gerendert wird, sonst wird sie explodieren.
Ich konnte dies mit jasmine-react tun. Diese Hilfsfunktionen bieten einige nützliche Funktionen beim Ausführen von Tests, fast bis zu dem Punkt, an dem TestUtils
vollständig gelöscht werden kann.
jasmineReact.render(component, [container])
rendern eine Instanz von component
in den DOM-Knoten, der in [container]
angegeben ist. Dies ist wie TestUtils.renderIntoDocument()
, außer dass die Komponente in einen angehängten DOM-Knoten anstelle eines gelösten DOM-Knotens umgewandelt wird. Es führt auch die notwendigen Reinigungsvorgänge durch, wenn der Test beendet ist.
jasmineReact.spyOnClass(componentClass, functionName)
wird eine bestimmte Funktion ausstechen, die zu einer Komponentenklasse gehört. Dieses Verhalten wird bis zum Ende des Tests beibehalten, dh Sie können diese Funktion aufrufen, bevor eine Komponente gerendert wird. Wenn ich das richtig verstehe, ist das, wonach Sie suchen.
Also, diese beiden Hilfsfunktionen verwendet wird, kann ich einen Test für die darüber sieht wie folgt aus etwas gezeigt Code schreiben:
var React = require('react/addons'),
Parent = require('./parent.js'),
Child = require('./child.js'),
jasmineReact = require('jasmine-react-helpers');
describe('Parent', function() {
it('does not blow up when rendering', function() {
jasmineReact.spyOnClass(Child, 'test').and.returnValue(false);
var parentInstance = jasmineReact.render(<Parent/>, document.body); //does not blow up
expect(parentInstance).toBeTruthy(); //passes
});
});
Lassen Sie mich wissen, wenn Sie Fragen haben.
Sie sollten es nicht verspotten. Wenn du sicherstellen willst, dass deine Komponente funktioniert, spotte alles, was du ihr als Requisite übergibst, spotte alle Abhängigkeiten, aber verspotte die Komponente selbst nicht. –
Ich stimme nicht zu. Wenn OP versucht, Komponententests zu schreiben, die Funktionen innerhalb seiner Komponente testen, ist es nicht ungewöhnlich für ihn, andere Funktionen auszugeben, die diese Tests beeinflussen könnten. OP - Welchen Testrahmen verwendest du? Abhängig von Ihrer Antwort könnte ich eine Lösung für Sie haben. –
Danke für Ihre Rückmeldungen. @MichaelParker Ich benutze Karma und Mokka. –