Existe-t-il un moyen de démonter et de ramasser à la poubelle un composant React monté à l'aide de TestUtils.renderIntoDocument
dans un test jsdom?
J'essaie de tester quelque chose qui se passe sur componentWillUnmount
et TestUtils.renderIntoDocument
ne renvoie aucun noeud DOM d'appeler React. unmountComponentAtNode
sur.
Non, mais vous pouvez simplement utiliser ReactDOM.render
manuellement:
var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);
C'est exactement ce que ReactTestUtils fait de toute façon , il n'y a donc aucune raison de ne pas le faire de cette façon si vous avez besoin d'une référence au conteneur.
Appeler directement componentWillUnmount
ne fonctionnera pas pour les enfants qui ont besoin de nettoyer les choses lors du démontage. Et vous n'avez pas non plus vraiment besoin de répliquer la méthode renderIntoDocument
, car vous pouvez simplement utiliser parentNode
:
React.unmountComponentAtNode(React.findDOMNode(component).parentNode);
Mise à jour: à partir de React 15, vous devez utiliser ReactDOM
pour obtenir le même résultat:
import ReactDOM from 'react-dom';
// ...
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(component).parentNode);
Juste pour mettre à jour la réponse de @BenAlpert. React.renderComponent sera bientôt obsolète, vous devriez donc utiliser les méthodes ReactDOM à la place:
var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);
Je suis juste tombé par hasard sur cette question. Je proposerais un moyen de la résoudre directement à l'aide de l'API renderIntoDocument décrite. Cette solution fonctionne dans le contexte de PhantomJS.
Pour monter sur le noeud du document:
theComponent = TestUtils.renderIntoDocument(<MyComponent/>);
Pour démonter le noeud du document:
React.unmountComponentAtNode(document);
Après votre test, vous pouvez appeler composantWillUnmount () sur le composant manuellement.
beforeEach ->
@myComponent = React.addons.TestUtils.renderIntoDocument <MyComponent/>
afterEach ->
@myComponent.componentWillUnmount()