J'ai plusieurs boutons sur ma page:
const action2Button = wrapper.find('button[children="Action 2"]'); expect(action2Button).toHaveLength(1); action2Button.simulate('click');
Comment puis-je sélectionner le bouton «Action 2» par son texte , pour pouvoir cliquer dessus? Je sais qu'il peut y avoir d'autres façons de sélectionner ce bouton, mais je cherche spécifiquement la meilleure façon de sélectionner un élément par son texte .
Une façon que j'ai trouvée est illustrée ci-dessous. Y a-t-il un meilleur moyen?
<div> <h1>Home</h1> <button>Action 1</button> <button>Action 2</button> </div>
3 Réponses :
Le meilleur moyen que je puisse trouver pour le faire, jusqu'à présent, est le suivant:
const button = wrapper.findWhere(node => { return ( node.type() && node.name() && node.text() === "Action 2" ); });
Il doit y avoir un nom et un type pour éviter de trouver un nœud de texte.
Je suis sûr qu'il doit y avoir une meilleure façon de faire cela.
Mise à jour: je ne sais pas si Enzyme a changé depuis que j'ai répondu à cela. Je vois que vous pouvez maintenant éviter un nœud de texte en vérifiant que node.type()
n'est pas indéfini. Je ne sais pas comment vous éviteriez un nœud parent avec le même texte.
La réponse acceptée n'a pas fonctionné pour moi parce que node.children().length
renvoie 1, ce que je suppose, c'est parce que c'est un nœud de texte, car node.children()[0]
n'est pas défini. 🤠· â € â ™ ‚ï¸
const button = wrapper.findWhere(node => ( node.name() === 'button' && node.children().length === 1 && node.children()[0] === undefined && node.text() === 'Action 2' ));
La réponse acceptée n'a pas fonctionné non plus pour moi - il semble qu'au moins le type
devrait être spécifié dans la déclaration de prédicat.
Donc, le suivant fonctionne pour moi:
const button = wrapper.findWhere(node => { return node.type() === 'button' && node.text() === "Action 2"; });
Mais je ne suis pas sûr que cette solution soit meilleure que celle initialement proposée par l'auteur.