2017-06-21 3 views
0

J'ai des scripts qui définissent dynamiquement le html lang = "XX" en haut du code html. Par exemple même en guatemala, j'ai pour certaines pages avec htl lang = "de", car elles ne dépendent pas du pays de l'IP mais des données d'autres modèles.Rspec/capybara - test html lang

Quoi qu'il en soit, comment puis-je affirmer dans un test avec rspec et capybara que l'attribut lang du html est « XX », qui serait le long de la ligne de:

expect(find('html')).to have_css('[lang="es"]') 

Le code HTML réel sur la page est

<html lang="XX" class="deal-page turbolinks-progress-bar" xmlns:fb="http://ogp.me/ns/fb#"> 

Je reçois cette erreur:

expected to find css "[lang=\"es\"]" but there were no matches 

Répondre

2

Le have_css matcher vérifie les descendants de la portée actuelle (dans votre exemple l'élément html) qui correspondent à la CSS donnée. Vous pouvez utiliser le match_css matcher qui vérifie si l'élément de périmètre actuel correspond à la donnée CSS

expect(find('html')).to match_css('[lang="es"]') 

ou (en supposant que vous avez pas d'autre utilisation pour l'élément html) il suffit de faire

expect(page).to have_css('html[lang="es"]') 

qui serait plus performant .

+0

Juste pour savoir, pourriez-vous accéder à l'attribut 'lang' et le vérifier en utilisant' match' ?, comme 'expect (find ('html') [: lang]). Pour correspondre ('es')'? –

+1

@ SebastiánPalma Vous pourriez, cependant, si la page changeait dynamiquement n'attendrait pas/réessayer pour la correspondance, il est préférable de ne pas utiliser de correspondance de texte sur les valeurs d'attribut. Techniquement, vous pouvez aussi faire'expect (find ('html [lang = "es"]')). Be 'mais le 'have_css' se lit mieux. –