Ich möchte überprüfen, ob ein Link mit einer bestimmten href auf einer Seite vorhanden ist. Ich bin derzeit tun sollte ich "/some-link-here" sehen, aber das scheint zu scheitern. Wie kann ich sicherstellen, dass der Link vorhanden ist, ohne dass ich auf "/some-link-here" Seite klicken muss?
Antworten
Zu viele Anzeigen?Sie müssen einen benutzerdefinierten Schritt hinzufügen
Then /^"([^\"]*)" should link to "([^\"]*)"(?: within "([^\"]*)")$/ do |link_text,
page_name, container|
with_scope(container) do
URI.parse(page.find_link(link_text)['href']).path.should == path_to(page_name)
end
end
Sie können den Schritt wie folgt verwenden Then "User Login" should link to "the user_login page"
, user_login ist der Name Ihrer Route
Ich habe die Antwort von Jatin verwendet, habe aber einen separaten Scoping-Schritt:
When /^(.*) within ([^:]+)$/ do |step, parent|
with_scope(parent) { When step }
end
Then /^"([^\"]*)" should link to "([^\"]*)"$/ do |link_text, page_name|
URI.parse(page.find_link(link_text)['href']).path.should == path_to(page_name)
end
Dann habe ich dies in meinem Test:
step '"my foods" should link to "food_histories" within ".tabs"'
Und das auf meinen Wegen:
# note: lots not shown
def path_to(page_name)
case page_name
when /^food_histories$/
food_histories_path
end
end
Dies ist, was ich selbst getan habe, ganz einfach, aber es bedeutet, dass Sie Ihre Url hardcoding sind, die ehrlich gesagt nicht ideal ist, da es Ihren Test sehr spröde macht. Vor allem, wenn Sie mit 3rd-Party-URLs sind!
Wenn Sie jedoch eine von Ihnen verwaltete URL verwenden und diesen Test gerne aufrechterhalten möchten, sollten Sie ihn durchführen.
Then /^the link is "(.*?)"$/ do |arg1|
page.should have_xpath("//a[@href='" + arg1 + "'][@target='_blank']")
end
Ich bin hier gelandet, als ich nach einer Lösung suchte und dachte, ich würde eine aktuelle Antwort geben. Es hängt davon ab, was Ihre capybara-Syntax ist, aber mit dem Matcher has_link?
Sie könnten schreiben für href = /some-link-here
y link_text "Click Me"
expect(page).to have_link("Click Me", href: '/some-link-here')