2017-06-20 5 views
0


Ich verwende Tülle mit reagieren, um die Benutzeroberfläche meiner Anwendung zu rendern. Ich habe eine Layer-Komponente angezeigt, wenn der Benutzer auf eine Schaltfläche klickt. Alles funktioniert gut, aber ich kann Layers Kinder nicht testen. Ich verwende Enzym, Mokka und Chai als Testsuite. Dies ist Code der Code meiner Komponente:Testen der Tülle Layer-Komponente

<Layer align="right" closer> 
    <Header size="large" justify="between" align="center"> 
     <Button icon={<CloseIcon />} plain={true} onClick={ props.hide }/> 
    </Header> 
    <Section key={index} pad={{ horizontal: 'large', vertical: 'small' }}> 
     { props.list } 
    </Section> 
</Layer> 

und dies ist mein Test:

const wrapper = shallow(<MyComponent />); 
const layer = wrapper.find(Layer); 

//this works 
expect(layer).to.have.length.of(1); 

const section = layer.find(Section); 

//and this fails 
expect(section).to.have.length.of(1); 

Mit Blick auf die gerenderte Komponente in der Anwendung, fand ich, dass Tülle seine Schichtkomponente auf diese Weise machen :

<Layer><span style={{ display: 'none'}}></span></Layer> 

Jeder kann mir helfen? Danke

Antwort

1

Wenn Sie sich die source code for the layer component ansehen, werden Sie sehen, dass es die Spanne zurückgibt, die Sie in der Rendermethode veröffentlicht haben. Erst wenn die Komponente montiert ist, wird die layer's contents will be rendered durch Aufruf der addLayer Methode in der Layer Klasse aufgerufen.

Ich glaube, dass Sie Enzym mount Funktion verwenden sollten, um zu testen, dass der Layer seinen Inhalt richtig darstellt, da Sie möchten, dass die -Methode aufgerufen wird.

+0

Ich versuche, Mount anstelle von flachen zu verwenden, aber das Ergebnis ist das gleiche. Ich fand die Spannweite nicht in der Testumgebung, aber meine Seite mit Chrome-Entwicklern zu überprüfen reagiert auf Tools, während die Anwendung ausgeführt wird. Ich merke auch, dass der Inhalt der Ebene außerhalb der gesamten Anwendung gerendert wird, aber es macht keinen Sinn! –

+0

Hey @alessia, das ist richtig. Beim Durchsehen des [code] (https://github.com/grommet/grommet/blob/master/src/js/components/Layer.js#L218-L233) sieht es so aus, als wäre die Ebene nach dem Mounten zum dom hinzugefügt worden Das Ergebnis des Tests ist also korrekt. –

+1

Ich habe eine Antwort gefunden, die Anweisungen zum Testen des tatsächlichen DOM enthält, das Enzyme und JSDom verwendet. Siehe [hier] (https://stackoverflow.com/a/38424409/5948656). –