Est-il possible de tester l'ordre des éléments via RSpec/Capybara?
Je suis en utilisant RSpec/Capybara que mon test de suite. J'ai un peu de javascript qui ajoute dynamiquement <li>
à la fin d'une <ul>
. Je veux écrire une spécification de requête pour s'assurer que ce qui se passe.
J'ai essayé d'utiliser le has_css
Capybara méthode et les sélecteurs CSS avancés pour tester pour la commande de la <li>
éléments, mais Capybara ne prend pas en charge la +
sélecteur CSS.
Exemple:
page.should have_css('li:contains("ITEM #1")')
pseuo_add_new_li
page.should have_css('li:contains("ITEM #1")+li:contains("ITEM #2")')
Personne ne sait d'une autre façon de tester pour la commande?
InformationsquelleAutor John | 2011-12-07
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en testant une regex match contre le contenu du corps de la page. Un peu encombrants, mais cela fonctionne.
assert page.body =~ /ITEM1.*ITEM2.*ITEM3/
expect(page) =~ >ITEM1<.*>ITEM2<.*>ITEM3<
J'ai trouvé un plus canonique moyen de tester ce comportement avec les CSS. Vous pourriez utilisateur
:first-child
,:last-child
et:nth-child(n)
sélecteurs en terme d'affirmer que vous aimez.Dans votre exemple, je voudrais essayer ces affirmations:
J'espère que cela aide quelqu'un. Lire plus à ce sujet.
nth-last-child
-- faute de frappe?nth-last-child
sélectionne le n-ième enfant à partir du bas. quirksmode.org/css/nthlastchild.htmlcet article listes de plusieurs façons de tester l'ordre de tri dans RSpec, le meilleur de ce qui semble être ce matcher:
J'ai eu le même problème récemment et j'ai trouvé ce neat & solution idéale:
http://launchware.com/articles/acceptance-testing-asserting-sort-order
C'est encore emballé comme un petit bijou.
Cette page a une manière très intelligente de tests de l'ordre de la chaîne des éléments sur une page, qu'elles soient dans une liste ou non:
https://makandracards.com/makandra/789-match-strings-in-a-given-order-with-cucumber-and-capybara
C'est sous la forme d'un concombre étape, mais vous devriez être capable d'extraire ce dont vous avez besoin pour un Rspec étape. Il est similaire à l'université Johns 'encombrants' solution - mais un peu plus évolué à partir de ce que je peux faire. Tous les autres ruse capybara étapes de tests peuvent être trouvés ici:
https://github.com/makandra/spreewald
Vous pouvez utiliser le tous méthode de recherche pour sélectionner plusieurs éléments, puis utiliser recueillir leur tirer les vers du texte dans un tableau:
Si votre liste n'est pas visible sur la page comme un popup menu de navigation, vous devez passer
visible: false
dans leall
méthode.Utiliser le
orderly
gem, écrit par l'auteur de la l'article mentionné précédemment.C'est aussi simple que:
Capybara devrait soutenir la
+
sélecteur (je crois qu'il utilise Nokogiri, qui prend en charge ce). Vous êtes peut-être en utilisant une ancienne version? Ou êtes-vous à l'aide d'un Capybara pilote qui ne prend pas en charge JavaScript, de sorte que l'élément supplémentaire n'est pas rendu à tous?Aussi, n'utilisez pas de RSpec pour tester votre code HTML. Le concombre est beaucoup mieux à ce niveau. Pour interagir avec JavaScript, vous aurez envie d'utiliser le Sélénium ou Capybara-Webkit. Ou si vous avez beaucoup de JavaScript, envisager de le tester avec le Jasmin.
+
sélecteur. Mon soupçon est le nouveauli
n'a pas été ajouté adjacentes pourITEM #1
, et il aurait utilisé le~
sélecteur à la place.À l'aide de capybara-ui vous pouvez utiliser le
#widgets
méthode pour obtenir tous les éléments dans l'ordre de haut en bas.Dans les solutions ci-dessus, il est très difficile de tester la commande si le fait d'avoir plusieurs éléments sur la page. Donc, j'ai trouvé un autre moyen.
J'ai posté la solution ici - Test de l'ordre(séquence) de contenu à l'aide de capybara
Cartographie des tableaux ayant css des éléments spécifiques, et puis le match de ce tableau avec les array(garder ces éléments dans la séquence)