J'ai un composant React avec un dialogue modal (construit en utilisant reactstrap
, mais d'autres ont signalé des problèmes similaires avec react-bootstrap
et d'autres types de composants modaux). Enzyme ne trouve aucun des composants à l'intérieur du modal, même s'ils sont très bien dans l'application. exemple minimal:Le contenu des boîtes de dialogue modales React n'est pas disponible pour les tests enzymatiques utilisant mount()
import React from 'react'
import { Modal } from 'reactstrap'
export default class MyModal extends React.Component {
render() {
return (
<div className="outside"> Some elements outside of the dialog </div>
<Modal isOpen={this.props.modalOpen}>
<div className="inside"> Content of dialog </div>
</Modal>
);
}
}
Je voudrais tester le contenu (dans ce cas, en utilisant jest
) comme celui-ci
import React from 'react'
import MyModal from './MyModal'
import { mount } from 'enzyme'
it('renders correctly',() => {
const wrapper = mount(<MyModal modalOpen/>);
expect(wrapper).toMatchSnapshot();
// Passes
expect(wrapper.find('.outside')).toHaveLength(1);
// Fails, 0 length
expect(wrapper.find('.inside')).toHaveLength(1);
});
Le test détecte le contenu en dehors du Modal correctement, mais ne trouve rien à l'intérieur . En regardant l'instantané montre que, en effet, rien à l'intérieur du <Modal>
n'est rendu. Cependant, cela fonctionne si je remplace mount
par shallow
. Le problème avec cela est que j'ai besoin mount
pour tester les méthodes de cycle de vie comme componentDidMount
.
Pourquoi le mount
ne restitue-t-il pas le contenu du modal? Je pensais que le point entier était qu'il rendait l'arbre entier des éléments enfants.