我有一个含模态对话框的React组件(使用reactstrap
构建,但其他人已报告与react-bootstrap
和其他类型的模块组件相似的问题)。酶无法找到模态内的任何组件,即使它们在实际应用程序中呈现良好。小例子:React模式对话框的内容不适用于使用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>
);
}
}
我想测试的内容(在这种情况下使用jest
)这样
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);
});
测试发现莫代尔正确以外的内容,但没有找到里面的任何东西。查看快照显示,确实没有渲染<Modal>
中的任何内容。但是,如果我用shallow
替换mount
,它确实有效。问题是我需要mount
来测试生命周期方法,如componentDidMount
。
为什么mount
渲染模态的内容?我认为整个问题是它渲染了整个儿童元素树。