Reactjs 尽管生成了相同的快照,但酶包装器无法实现jest相等

Reactjs 尽管生成了相同的快照,但酶包装器无法实现jest相等,reactjs,jestjs,enzyme,snapshot,Reactjs,Jestjs,Enzyme,Snapshot,下面是一个简单的React组件,带有一个带有默认值的可选道具: class Test extends Component { static defaultProps = { role: 'default' } render() { return ( <div role={this.props.role}> { this.props.children } </div> ); } } expor

下面是一个简单的React组件,带有一个带有默认值的可选道具:

class Test extends Component {
  static defaultProps = {
    role: 'default'
  }
  render() {
    return (
      <div role={this.props.role}>
        { this.props.children }
      </div>
    );
  }
}
exports[`should render the same tree 1`] = `
<Test
  role="default"
>
  <div
    role="default"
  />
</Test>
`;

exports[`should render the same tree 2`] = `
<Test
  role="default"
>
  <div
    role="default"
  />
</Test>
`;
此外,正如预期的那样,在省略可选属性以及为其提供默认值的情况下,这会生成相同的快照:

class Test extends Component {
  static defaultProps = {
    role: 'default'
  }
  render() {
    return (
      <div role={this.props.role}>
        { this.props.children }
      </div>
    );
  }
}
exports[`should render the same tree 1`] = `
<Test
  role="default"
>
  <div
    role="default"
  />
</Test>
`;

exports[`should render the same tree 2`] = `
<Test
  role="default"
>
  <div
    role="default"
  />
</Test>
`;
exports[`应该呈现相同的树1`]=`
`;
导出[`应呈现相同的树2`]=`
`;
我正在努力找出这个测试用例失败的原因

  • 我错过了什么
  • 尽管存在重复的快照,但此相等性检查为何失败
  • 它是否与从
    enzyme到json
    toJson
    实用函数有关
  • 它可能与酶本身有关吗

酶到json中的helper函数被称为
toJson()
,但这有点用词不当。它不会返回JSON,它实际上返回了一个相当复杂的对象,Jest
toMatchSnapshot()
会将该对象转换为最终出现在快照文件中的JSON

最高级别的两个对象的简化视图返回
无视觉差异
,但如果深入
节点
键一个级别,则可以开始看到差异:


expect(toJson(a.node).toEqual(toJson(b.node))

似乎是
\u debugID
(在树中的多个级别)的区别。这与渲染的实际DOM树有关吗?@Hristo它与渲染的DOM树无关,但不知道这一点,只是在两个对象上进行深度相等。由于对象中存在不同的值,因此断言失败。哦,对了,这是一个好的观点。也许我可以忽略这些键/值对,但这似乎更像是一种黑客行为而不是解决方案。@hr有一个建议:如果你只是想比较浅层生成的html,你可以这样做
expect(a.html()).toEqual(b.html())是的,我试过了,效果很好。我对使用Jest来测试React组件非常陌生,我不确定使用
.html()
作为平等性检查是否是一种好的做法。