Exactement ce qu'il dit. Un exemple de code:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
const b = wrapper.find('.btn');
expect(b.text()).to.be.eql('OK'); // fails,
La méthode html
renvoie également le contenu de l'élément mais également l'élément lui-même ainsi que tous les attributs, par exemple il donne <button class='btn btn-primary'>OK</button>
. Donc je suppose que, dans le pire des cas, je peux appeler html
et le regex, mais ...
Existe-t-il un moyen d'obtenir simplement le contenu de l'élément, donc je peux l'affirmer.
N'oubliez pas que vous passez un nœud (ReactElement) à la fonction shallow
et qu'il n'y a pas d'attribut HTML class
dans React. Vous devez utiliser className
.
De React documentation
Tous les attributs sont en chameau et les attributs
class
etfor
sontclassName
ethtmlFor
, respectivement, pour correspondre à la spécification de l'API DOM.
Ce test devrait fonctionner
const wrapper = shallow(<div><button className='btn btn-primary'>OK</button></div>);
const button = wrapper.find('.btn');
expect(button.text()).to.be.eql('OK');
Si vous avez trouvé cela en recherchant "inclut le texte", essayez:
it('should show correct text', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.text().includes('my text')).toBe(true);
});
Je pense que @ louis-barranqueiro a probablement répondu à votre question sous-jacente. Autrement dit, vous voulez un sélecteur CSS et vous auriez donc dû utiliser className
pas class
.
Cependant, pour essayer de répondre à la question de savoir comment sélectionner le texte d'un élément en utilisant l'exemple réel que vous avez donné:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
vous devez utiliser quelque chose comme un sélecteur de propriété d'objet , par exemple:
expect(wrapper.find({ class: "btn btn-primary" }).text()).to.equal('OK');
ou la syntaxe prop:
expect(wrapper.find('[class="btn btn-primary"]').text()).to.equal('OK');
(ou encore plus explicitement):
expect(wrapper.find('button[class="btn btn-primary"]').text()).to.equal('OK');