React Enzymeが2番目(またはn番目)のノードを見つける


128

Jasmine Enzymeの浅いレンダリングでReactコンポーネントをテストしています。

この質問のためにここでは簡略化しています...

function MyOuterComponent() {
  return (
    <div>
      ...
      <MyInnerComponent title="Hello" />
      ...
      <MyInnerComponent title="Good-bye" />
      ...
    </div>
  )
}

MyOuterComponentの2つのインスタンスがMyInnerComponentあり、それぞれで小道具をテストしたいと思います。

最初にテストする方法を知っています。で使用findしていfirstます...

expect(component.find('MyInnerComponent').first()).toHaveProp('title', 'Hello');

ただし、の2番目のインスタンスをテストするのに苦労していますMyInnerComponent

このようなものがうまくいくことを願っていました...

expect(component.find('MyInnerComponent').second()).toHaveProp('title', 'Good-bye');

またはこれ...

expect(component.find('MyInnerComponent')[1]).toHaveProp('title', 'Good-bye');

しかし、もちろん上記のどちらも機能しません。

私は明らかなことを逃しているように感じます。

しかし、ドキュメントを調べても、類似した例はありません。

誰でも?

回答:


225

必要なのは、.at(index)メソッド.at(index)です。

したがって、あなたの例では:

expect(component.find('MyInnerComponent').at(1)).toHaveProp('title', 'Good-bye');


1
私のためにそれat()を使用して働いていたfindAll()、おそらくプロジェクトのバージョンに関連し、。
Jonatas CD、

11

それぞれについて特定のものをテストする場合は、一致したセットを反復処理することも検討してください。

component.find('MyInnerComponent').forEach( (node) => {
    expect(node.prop('title')).toEqual('Good-bye')
})

2
 const component = wrapper.find('MyInnerComponent').at(1); 
 //at(1) index of element 0 to ~

 expect(component.prop('title')).to.equal('Good-bye');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.