【发布时间】:2019-03-11 18:49:02
【问题描述】:
在<MyComponent> 组件中,我使用react-responsive <MediaQuery> 组件来区分渲染移动和桌面内容。
export class MyComponent extends React.Component {
//...
render() {
<MediaQuery query="(max-width: 600)">
<div className="inside-mobile">mobile view</div>
</MediaQuery>
}
}
我想使用enzyme 测试<MyComponent> 的render() 中的HTML,但似乎无法深入了解<MediaQuery> 的子元素:
it('should dive into <MediaQuery>', () => {
const wrapper = mount(<Provider store={mockedStore}><MyComponent/></Provider>)
const actual = wrapper.getDOMNode().querySelectorAll(".inside-mobile")
expect(actual).to.have.length(1)
}
console.log(wrapper.debug()) 表明 <MediaQuery> 内部的任何内容都没有被渲染。
我猜在测试中(没有实际的浏览器)window.width 未设置,这导致<MediaQuery> 组件不呈现任何内容。
我想做的事:
我希望能够使用enzyme 和react-responsive(或类似的东西,例如react-media)来测试<MyComponent> 的内容,以处理移动和桌面视口。
我尝试过的事情:
- 通过使用
enzyme的shallow和dive()而不是mount来规避此问题,但无济于事。 - 使用
react-media的<Media>而不是react-responsive的<MediaQuery>,默认情况下似乎将window.matchMedia()设置为true。但是,这也不起作用。
console.log(wrapper.debug()) 显示:
<MyComponent content={{...}}>
<Media query="(min-width: 600px)" defaultMatches={true} />
</MyComponent>
【问题讨论】:
标签: reactjs unit-testing media-queries enzyme chai-enzyme