Capybara fournit une méthode utile pour vérifier un lien:
have_link
qui pour autant que je sache, peut être utilisé comme:
have_link("link_text", :href => "actual link")
Cependant, je ne me soucie pas du link_text, je veux juste vérifier href
(car la liaison du test au texte est plus fragile). Si je veux seulement vérifier le href
ce serait un test de vue.
Comment utiliser Capybara pour vérifier le href
sans avoir besoin de vérifier le texte? Peut-être que je peux utiliser regex?
[modifier] libellé modifié en fonction de la réponse ci-dessous
Capybara ne fournit pas de méthode link_to, donc je ne sais pas d'où vous obtenez cela (Rails fournit un link_to pour générer des liens dans la vue). Pour trouver un lien basé uniquement sur son href en utilisant capybara, vous pouvez le faire
link = page.find(:css, 'a[href="actual link"]')
ou si vous cherchez à affirmer que l'élément existe
page.assert_selector(:css, 'a[href="actual link"]')
ou - si vous utilisez RSpec
expect(page).to have_selector(:css, 'a[href="actual link"]')
Étant donné que le lien recherche par défaut les sous-chaînes dans le texte du lien, vous pouvez également le faire
expect(page).to have_link(nil, href: 'actual link')
ou
page.assert_selector(:link, nil, href: 'actual link')
En regardant la même réponse, j'ai découvert qu'il était possible de passer des options au premier argument de have_link
car son implémentation est:
# RSpec matcher for links
# See {Capybara::Node::Matchers#has_link?}
def have_link(locator=nil, options={}, &optional_filter_block)
locator, options = nil, locator if locator.is_a? Hash
HaveSelector.new(:link, locator, options, &optional_filter_block)
end
Donc, si vous ne vous souciez pas du texte du lien, vous pouvez en toute sécurité omettre le premier paramètre et le faire (syntaxe RSpec):
expect(page).to have_link(href: 'some url')
# or even
expect(page).to have_link(href: /some url regexp/)