Ich versuche, eine Instanz zu verspotten, die in einer React JS-Komponente erstellt wird. Die Instanz ist eine allgemeine ECMAScript 2016-Klasse und keine React-Komponente. Ich benutze Jasmine, reagiere JS TestUtils und babel-rewire zum Testen.Wie spottet man eine Instanz, die in der React JS-Komponente erstellt wurde?
Mein Komponentencode Reaktion sieht wie folgt aus:
import MyHandler from '../../js/MyHandler';
export default class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myHandler = new MyHandler();
}
someComponentMethod() {
this.myHandler.someMethod();
}
render() {
return <div>...</div>;
}
}
Meine Klasse sieht wie folgt aus:
export default class MyHandler {
someMethod() {
// ...
}
}
Mein Test und was ich versuchte, so weit:
// gives exception
let myHandler = new MyHandler();
let spy = spyOn(myHandler, "someMethod").and.returnValue(null);
MyComponent.__Rewire__ ("MyHandler", spy);
// also gives exeption
MyComponent.__set__ ("MyHandler", spy);
let component = TestUtils.renderIntoDocument(<MyComponent />);
Für spöttischen andere React-Komponenten verwende ich babel-rewire
, die gut funktioniert. Aber ich kann die Instanz nicht durch einen Spion oder Spion ersetzen.
Ich weiß, ich könnte die Instanz in die Komponente als eine Eigenschaft übergeben (und damit in einem Test), aber ich frage mich, ob dies eine gute Übung ist und ich fürchte, ich werde das Problem in der nächsten Komponente haben .
Jede Hilfe wird geschätzt!
Ihre Instanz wird importiert, oder? –
Ja, es ist, verpasst, dass in dem Schnipsel. Es wird importiert über 'import MyHandlerHandler von '../../ js/MyHandler';' – Ria
werfen Sie einen Blick auf diese https://www.npmjs.com/package/inject-loader Ich benutze es die ganze Zeit, um meine zu testen Komponenten –