React Enzyme trova il secondo (o ennesimo) nodo


128

Sto testando un componente React con rendering superficiale Jasmine Enzyme.

Semplificato qui ai fini di questa domanda ...

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

MyOuterComponentha 2 istanze di MyInnerComponente vorrei testare gli oggetti di scena su ciascuna di esse.

Il primo che so come testare. Io uso findcon first...

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

Tuttavia, sto lottando per testare la seconda istanza di MyInnerComponent.

Speravo che qualcosa del genere avrebbe funzionato ...

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

o anche questo ...

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

Ma ovviamente nessuno dei due funziona.

Mi sento come se mi mancasse l'ovvio.

Ma quando guardo i documenti non vedo un esempio analogo.

Chiunque?

Risposte:


225

Quello che vuoi è il .at(index)metodo: .at (index) .

Quindi, per il tuo esempio:

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


1
per me ha at()funzionato con findAll(), probabilmente correlato alla versione del progetto.
Jonatas CD

11

Se devi testare determinate cose su ognuna, considera anche l'iterazione attraverso il set abbinato:

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');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.