2015-07-13 2 views
13

Capybara eine nützliche Methode bietet einen Link zu überprüfen:Rails: Wie Capybara verwenden, um den href-Wert eines Links zu testen, ohne sich um den Text zu kümmern?

have_link 

, die so weit wie ich kann wie verwendet werden kann sagen:

jedoch
have_link("link_text", :href => "actual link") 

, sorge ich mich nicht um die LINK_TEXT, eher Ich möchte nur href überprüfen (als Verknüpfung der Test mit dem Text ist spröder). Wenn ich nur die href überprüfen möchte, wäre dies ein Ansichtstest.

Wie verwende ich Capybara, um die href zu überprüfen, ohne den Text zu überprüfen? Vielleicht kann ich Regex verwenden?

[Bearbeiten] geändert Formulierung basierend auf Antwort unten

Antwort

26

Capybara keine link_to Verfahren bereitzustellen, so bin ich nicht sicher, wo Sie bekommen, dass aus (Schienen eine link_to zur Erzeugung von Verbindungen in der Ansicht zur Verfügung stellt) . einen Link basiert auf nur seine href zu finden Capybara mit Ihnen

link = page.find(:css, 'a[href="actual link"]') 

tun könnte, oder wenn Sie behaupten freuen zu, dass das Element

page.assert_selector(:css, 'a[href="actual link"]') 

oder existiert - bei Verwendung von RSpec

expect(page).to have_selector(:css, 'a[href="actual link"]') 

Da Link standardmäßig nach Teilstrings im Linktext sucht, können Sie auch

expect(page).to have_link(nil, href: 'actual link') 

oder

page.assert_selector(:link, nil, href: 'actual link') 
+0

natürlich Ihr Recht über die Syntax. Ich glaube, sein Aufruf "have_link" https://stackoverflow.com/questions/10902308/testing-a-links-target-attribute-with-capybara-rspec –

+1

Ich habe meine Antwort zu aktualisieren have_link rspec Matcher Verwendung –

+0

The Nil Syntax funktioniert nicht für mich ... jemand anderes bekommt das? –

1

Während zur gleichen Antwort suchen fand ich heraus, dass es möglich ist, Optionen erste Argument von have_link zu bestehen, weil es Implementierung lautet:

# 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 

Also, wenn Sie kümmern sich nicht über Link-Text können Sie sicher erste Parameter weglassen und dies tun (RSpec-Syntax):