2017-02-14 4 views
2

Ich bin eine Komponente mit einer anderen Komponente im Innern wie so Montag:Enzym - wie der Ausgangszustand der inneren Komponente zu testen?

const wrapper = mount(<IntlProvider><SignUpForm /></IntlProvider>); 

Die Komponente <SignUpForm /> einen Anfangszustand {errors: {}} haben sollte. Ich verwende die folgende Behauptung:

expect(wrapper.find(SignUpForm).state('errors')).to.equal({}); 

aber ich erhalte den folgenden Fehler, wenn die Durchführung des Tests:

Error: ReactWrapper::state() can only be called on the root

Also, wie acces ich den Zustand der <SignUpForm /> Komponente?

Antwort

2

Nun, das kann man nicht mit Enzymen tun (soweit ich weiß), aber es gibt einen wirklich guten Grund dafür - Unit Tests sollten einige getrennte Teile der Applikation testen (nie zwei Teile in einem Test) . Dieser Provider ist wirklich eine Komponente, so dass Sie versuchen, Kind Komponente Montage Elternkomponente zu testen ...

Das gleiche Problem ist, wenn Sie Komponenten mit dem Redux-Speicher verbunden haben, können Sie sie in Provider umwickeln, aber das ist nicht die Fall. Sie sollten die Komponente von der umschlossenen Version trennen und dann nur die Komponente mit Isolierung von Drittanbietern/Eltern/Geschwistern testen.

Ich exportiere Komponente und verbundene Komponente aus einer Datei (zwei Exporte, eine named, eine Standardeinstellung) und in Tests importiere ich nur benannte (NICHT verbundene) Komponente. Ich weiß nicht wirklich wan't redux Anbieter zu testen;)

//component.jsx 
export function MyComp() {} 
export default connect()(MyComp) 

//component.test.js 
import {MyComp} from "./component" 

//another component 
import MyComp from "./component" 
+1

Mit dem obigen Beispiel stützt sich die Komponente auf reagieren-intl, die normalerweise die Wurzelkomponente reagieren Router wickelt wie so '' '. ..'''. SignUpForm erwartet Requisiten von diesem react-intl-Paket. Damit SignUpForm eine echte Repräsentation der in der Anwendung verwendeten Komponente ist, muss ich diese Requisiten verspotten. – JoeTidee

+0

Mit redux habe ich genau das gleiche Problem, also teste ich {MyComp} mit Requisiten vorbereitet und übergebe diese Komponente manuell. Ich weiß, dass es einen Platz für Tippfehler etc. gibt, aber es enthält keine anderen Komponenten als die getesteten. – kzg

Verwandte Themen