【问题标题】:Unit test to check order of React components单元测试检查 React 组件的顺序
【发布时间】:2018-06-12 06:00:35
【问题描述】:

我有一个名为 Page 的 React 组件,其中包含 2 个组件 a 和 b,如下所示 -

<div>
<div id="component-a"></div>
<div id="component-b"></div>
</div>

在我的单元测试中,我想确认组件的顺序,即“component-a”是否在“component-b”之前。

通过shallow wrapper docs,我觉得我必须遍历所有孩子,直到找到组件-a。如果我在此之前找到了 component-b,则为 false,否则为 true。

有没有更好的方法来实现上述目标?如果我能有一个方法给我一个给定元素的子位置,那就太好了。

现在我只检查“组件-a”的存在,这还不够(如下所示)。

const wrapper = mount(<Page {...props} />);
expect(wrapper.find('.component-a')).toHaveLength(1);

【问题讨论】:

  • 它适用于纯 css 吗? find(".component-a + .component-b")
  • 不是一个完美的解决方案,但也许你可以做一个快照测试?这可以确保您和您的队友不会意外更改此组件的顺序。

标签: javascript reactjs jestjs enzyme


【解决方案1】:
const wrapper = shallow(<Page {...props} />);
const elementsOrder = [];

for(let order = 0; order < wrapper.children().length; order++) {
    elementsOrder.push(wrapper.children().at(order).prop('id'));
}

expect(elementsOrder.indexOf('component-a')).toBeLessThan(elementsOrder.indexOf('component-b'));

【讨论】:

  • 这里不知道组件的位置。我只说 2 是为了简化示例。
  • 如果你注意到了,我提到遍历所有的子元素直到我找到组件-a 是一个总是可以做的事情。我仍然将您的答案标记为已接受,因为似乎没有更好的浅包装提供
猜你喜欢
  • 2021-10-18
  • 2011-05-04
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2020-09-09
  • 2019-05-12
相关资源
最近更新 更多