sagen, dass ich die folgende Anwendung haben:Wie kann der Rückruf von Komponenten, der durch den Rückruf von untergeordneten Komponenten aufgerufen wird, in Reaktion mit Enzym getestet werden?
class Child extends React.Component {
render() {
return <button onClick={this.handleChildOnClick}>{this.props.children}</button>;
}
handleChildOnClick() {
this.props.onChildClick('foo');
}
}
class Parent extends React.Component {
render() {
return <Child onChildClick={this.handleParentOnClick}>click me</Child>;
}
handleParentOnClick(text) {
this.props.onParentClick(12345);
}
}
class App extends React.Component {
render() {
return <Parent onParentClick={(num) => console.log(num)} />;
}
}
ich die Parent
Komponente zu testen, um die richtige Art und Weise herauszufinden, eine harte Zeit. Die Child
und App
man kein Problem, aber die Parent
...
Ich meine, wie kann ich testen, dass ein Klick auf die Child
Komponente wird den Parent
Klick Rückruf aufzurufen, ohne:
- ... Rendering
Child
.Parent
sollte isoliert als flacher Renderer getestet werden.Child
wird auch isoliert getestet und wenn ich ein Mounten rendern, teste ich grundsätzlich den Klick-Callback auf derChild
zweimal. - ... direkt
handleParentOnClick
auf derParent
Instanz aufrufen. Ich sollte nicht auf die genaue Implementierung vonParent
für diese abhängen. Wenn ich den Namen der Callback-Funktion ändere, bricht der Test ab und es könnte sehr wohl ein false positives sein.
Gibt es eine dritte Option?
Die 'find' -Methode von Enzyme akzeptiert eine React-Klasse als Selektor, also möchten Sie wahrscheinlich die Anführungszeichen um' Child' (Zeile 8) entfernen. Abgesehen davon ist dies fast wörtlich, dass die Antwort ich geben würde –
Dies war die Antwort, die ich suchte, vielen Dank =) @ JordanBonitatis Das wird einen zusätzlichen Import erfordern, während das Zitat Beispiel nicht. Abgesehen davon, dass eine Zeichenkette fehleranfälliger ist, gibt es einen anderen Vorteil, wenn Sie eine Klasse gegen eine Zeichenkette als Selektor übergeben? –