Знайти другий (або n-й) вузол React Enzyme


128

Я тестую компонент 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');

Однак я намагаюся перевірити другу інстанцію MyInnerComponent.

Я сподівався, що щось подібне спрацює ...

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

або навіть це ...

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

Але, звичайно, жодне з перерахованих вище не працює.

Я відчуваю, що я пропускаю очевидне.

Але коли я переглядаю документи, я не бачу аналогічного прикладу.

Хтось?

Відповіді:


225

Що ви хочете, це .at(index)метод: .at (індекс) .

Отже, для вашого прикладу:

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


1
для мене це at()працював з використанням findAll(), ймовірно, пов'язаної з версією проекту.
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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.