加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 如何使用酶测试React-Responsive组件?

发布时间:2020-12-15 05:07:31 所属栏目:百科 来源:网络整理
导读:我正在使用React-Reponsive库. https://github.com/contra/react-responsive 我正在努力弄清楚如何测试嵌套在React-Responsive Media Query Components中的组件: export default class AppContainer extends React.Component { render(){ return( MediaQuer
我正在使用React-Reponsive库.
https://github.com/contra/react-responsive

我正在努力弄清楚如何测试嵌套在React-Responsive Media Query Components中的组件:

export default class AppContainer extends React.Component {
  render(){
    return(
      <MediaQuery minDeviceWidth={750}>
         <Header />
      </MediaQuery>
    );
  }
}

describe("AppContainer",() => {
  let App;
  let wrapper;
  beforeEach(() => {
    wrapper = mount(<Provider store={store}><AppContainer location={location} /></Provider>);
    App = wrapper.find(AppContainer);

  });
  it('to have a <Header /> component',() => { 
    console.log(App.debug());
    expect(App.find(Header)).to.have.length(1);
  });
}

测试结果:

1) AppContainer to have a <Header /> component:
AssertionError: expected { Object (component,root,...) } to have a length of 1 but got 0

console.log输出的相关部分是:

<MediaQuery minDeviceWidth={750} values={{...}} />

指示标题确实没有出现在渲染树中.但是,如果我删除MediaQuery并使Header成为AppContainer的直接子项,则测试通过.

我想这不是一个错误,因为我对Enzyme和一般的测试组件都很新.任何帮助或示例将不胜感激.

请注意:我对此组件的其他测试正在通过.我相信进口和设置都是正确的.

问题是Media Query正在寻找与jsdom未定义的window.matchMedia.

在这种情况下,我需要使用服务器端呈现实现.然而,这将需要宽度的静态值,这会破坏响应性.

我的解决方案是在测试虚拟DOM上设置一个全局变量.

window.testMediaQueryValues = {width:740};

然后MediaQuery可以访问它们,如果它们在那里:

<MediaQuery maxWidth={smallViewMaxWidth} values={window.testMediaQueryValues}>

在未设置变量的情况下,将忽略空值,并且组件将照常渲染.

非常感谢@Contra的帮助和超级图书馆

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读