166 votes

Trouver le deuxième (ou le nième) noeud Enzyme React

Je teste un composant React avec le rendu superficiel de Jasmine Enzyme.

Simplifié ici dans le cadre de cette question...

function MyOuterComponent() {
  return (

      ...

      ...

      ...

  )
}

MyOuterComponent a 2 instances de MyInnerComponent et je voudrais tester les props de chacune.

Je sais comment tester la première. J'utilise find avec first...

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

Cependant, j'ai du mal à tester la deuxième instance de MyInnerComponent.

J'espérais que quelque chose comme cela fonctionnerait...

expect(component.find('MyInnerComponent').at(1)).toHaveProp('title', 'Au revoir');

ou même cela...

expect(component.find('MyInnerComponent').at(1)).toHaveProp('title', 'Au revoir');

Mais bien sûr, ni l'un ni l'autre ne fonctionnent.

J'ai l'impression de passer à côté de quelque chose d'évident.

Mais lorsque je parcours la documentation, je ne trouve pas d'exemple analogue.

Quelqu'un?

277voto

tom Points 5216

Ce que vous voulez est la méthode .at(index) : .at(index) .

Donc, pour votre exemple :

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

2 votes

Pour moi, le at() a fonctionné en utilisant avec findAll(), probablement lié à la version du projet.

0 votes

.at(index) a fonctionné pour moi! N'oubliez pas que tous les index commencent par 0.

16voto

Fronker Points 658

Si vous devez tester certaines choses sur chacun, envisagez également de parcourir l'ensemble correspondant :

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

3voto

D V Yogesh Points 290
const composant = wrapper.find('MonComposantInterieur').at(1); 
 //at(1) index de l'élément 0 à ~

 expect(composant.prop('title')).to.equal('Au revoir');

1voto

Taimoor Changaiz Points 892

TL;DR;

utilisez findAll avec .at(1)

const innerComponent = component.findAll('MyInnerComponent').at(1);
expect(innerComponent).toHaveProp('title', 'Good-bye');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X