【问题标题】:Libray wrapped React component, how to find DOM children with Enzyme?库包装的 React 组件,如何使用 Enzyme 找到 DOM 子项?
【发布时间】:2018-04-07 03:20:39
【问题描述】:

我正在尝试测试一个库包装组件,该组件生成它自己的标记,呈现在componentDidMount 中。鉴于以下...

// <MyComponent />

componentDidMount() {
  transform(this.ref);
}

render() {
  return (
    <div className='foo' ref={(self) => this.ref = self} />
  )
}

where (external lib) transform 做了 something 来改变渲染的标记。假设将其转换为以下...

<div class="foo">
  <article>
    <h2>noms</h2>
    <section>
      <ul class="list">
        <li>pizza</li>
        <li>taco</li>
      </ul>
    </section>
  </article>
</div>

如何在渲染的标记上实际使用 Enzyme API?


我正在尝试mount 组件,然后是find 我的.list 元素,但实际上从未找到长度为0 的结果。我的以下测试有什么问题?

let wrapper = Enzyme.mount(<MyComponent />);

let list = wrapper.find('.list'); // nope

我相信我的基本设置是正确的,因为调用 wrapper.html() 确实 实际上完全返回了上述转换后的标记。我在这里错过了什么?

【问题讨论】:

  • 您应该添加这行代码并查看它打印出来的内容。这将使您了解 Enzyme 呈现的内容wrapper.tap(n =&gt; console.log(n.debug()))
  • 它只渲染第一个孩子,但.html() 返回整个树。为什么它只有一层深,而且,我怎样才能更深?

标签: javascript node.js reactjs jestjs enzyme


【解决方案1】:

由于wrapper 是您的组件,而ref 是您的组件的一个指向DIV 的属性,这应该可以工作:

let wrapper = Enzyme.mount(<MyComponent />);

let list = wrapper.instance().ref;

【讨论】:

  • 返回[Function: ref]。我尝试调用 wrapper.ref.find('.list'),然后抛出异常。我不确定我应该在这里看到什么。想法?
  • 我可以通过调用wrapper.instance().ref 得到我需要的东西。如果您编辑您的答案,我很乐意接受,以防其他人在将来发现这有帮助
  • 现已修复。好一个@scniro!
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2017-01-01
  • 2017-05-03
  • 2019-03-10
相关资源
最近更新 更多