Wie spy componentWillMount mit Scherz-und Enzym -
Ich versuche zu testen, ob componentWillMount genannt wurde und für die, die mein test ist
test('calls `componentWillMount` before rendering', () => {
let fn = jest.fn(SomeComponent.prototype.componentWillMount)
mount(<SomeComponent />)
expect(fn).toHaveBeenCalled()
})
Aber auch wenn die componentWillMount-Methode aufgerufen wird, wird der test nicht bestanden.
Was vermisse ich hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob die anderen Antworten geholfen haben, mit Ihrer Frage, aber Sie sollten nicht brauchen, um zu testen componentWillMount. Reagieren sollte Sie schon tun, dass die Prüfung für Sie.
Mehr relevant für Ihre Prüfung wäre zum testen der Funktionen oder Aktionen, die Sie setzen sind, die Methode für die Komponente.
Wenn Sie einige API-Aufruf, ausgeführt wird eine Funktion basierend auf Requisiten oder irgendetwas anderes, das ist, was Sie sein sollten, testen für. Simulieren der Funktion/Aktion/code, dass
componentWillMount
löst, und stellen Behauptungen und Erwartungen auf, die.Beispiel:
Komponente:
Tests:
this.fetch('data');
?this.prop.fetch('data')
ist nur ein Beispiel. Für diese, ich sage nur das Sie eine Funktion aufrufen, übergebenYourComponent
durch Requisiten. Also keine, die nicht Bestandteil der Klasse selbst. Man kann wirklich testen Sie für nichts, aber die zugrunde liegende Punkt hier ist, dass Sie nicht wirklich brauchen, um zu testencomponentWillMount
oder jede reagieren die lifecycle-Methoden. Reagieren/Facebook übernimmt das für Sie. Testen Sie einfach, dass der code, den Sie geschrieben haben, in denen die lifecycle-Methoden arbeitet.this.props.fetch()
wurde stattthis.fetch()
wie würden Sie testen, die innerhalbcomponentWillMount
die Funktionthis.fetch()
wurde einige Male angerufen?mount
Funktion, in der Erwartung, ein bestimmtes DOM-element/Komponente vorhanden/nicht vorhanden. Ansonsten würde ich flach wickeln Sie die Komponente und verwenden Siewrapper.instance().yourMethod(your_arguments)
testen, ob die Methode richtig handeln. Ich hoffe, jemand anderes kann hier in Glockenspiel auf, weil dies der beste Weg, ich kann denken, es zu tun.componentDidMount
ich will das Auto starten und shift das Getriebe, beide Aktionen sollten Funktionsaufrufe (startCar
undshiftGear
), sondern schreiben die Logik in dercomponentDidMount
? Ist, dass ein faires Verständnis? Ich sehe, dass, wenn Sie mit Redux dies kann erreicht werden durch Verwendung vonmapStateToProps
undmapDispatchToProps
undconnect
middleware..instance()
wrapper-Methode von Enzym zu nennen, reagieren lifecycle-Methoden. So etwas wiewrapper.instance().componentDidMount()
wird Ihnen erlauben, zu schreiben tests ohne Extraktion der Logik in anderen Funktionen. Ich habe das Gefühl, dass es sauberer und einfacher, mit zu arbeiten code, wenn die Logik gewonnen wird, aber das ist der Spaß an der Sache. Es ist bis zu Ihnen 🙂Versuchen Sie dies:
Ich würde erstmal
spy
auf die KomponentecomponentWillMount
Methode, sondern auch.and.CallThrough()
zu verhindern, dass es Spott sein Inhalt. Hoffe, das hilft:Ich glaube nicht, dass die obige Antwort die das Problem behebt. Die Scherz erlauben, Sie zu spyOn eine Methode, sondern ermöglicht es Ihnen nicht um
callThrough
bei der Spionage auf Ihren Anruf-status. Die Lösung funktionierte für mich am besten ist, um den setup-test mit einer KomponentecomponentWillMount
definiert. Gelehnt auf den Scherz nur machen die Dinge komplizierter.JS: