3 Stimmen

Feststellen, ob eine Verbindung mit Cucumber/Capybara besteht

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?

5voto

jatin Punkte 1369

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

0voto

John Naegle Punkte 7907

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

0voto

Dono Punkte 656

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

0voto

jjinkxy Punkte 58

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')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X