2016-04-25 8 views
0

Hallo Leute von Stackoverflow,page.has_content?() vs. (Seite) .to have_content

Ich nehme über die Arbeit von jemandem, und mein Vorgänger schaffte einen Testset mit Gurke & Capybara & Selen. Ich bin mit dem Los vertraut, aber ich habe eine Frage bezüglich seiner Art, Text auf einer Seite zu finden.

Seine Umsetzung:

erwarten (Seite) .to have_content (Text)

Meine Implementierung:

page.has_content (Text)

Was mir aufgefallen ist, dass die erste Implementierung oft f ails, weil die Automatisierung "zu schnell" ist, damit die Website ihre Seite laden kann. Letzteres scheint eine robustere Implementierung zu sein, vielleicht wegen seiner Einfachheit?

Kann mir jemand sagen, ob es ein Recht oder ein Unrecht gibt, oder ob diese beiden grundlegend verschieden sind. Weil ich versucht habe, das Netz zu suchen, aber nicht wirklich eine feste Schlussfolgerung gefunden habe.

Vielen Dank im Voraus!

Antwort

3

have_content löst eine Ausnahme aus, wenn die Erwartung fehlschlägt und sollte in den meisten Testsuiten häufiger verwendet werden als has_content. has_content? ist im Grunde nur ein Wrapper um have_content, die die Ausnahme abfängt und gibt wahr oder falsch, und ist für die Verwendung mit conditionals

if page.has_content?(...) 
    # click something 
else 
    # click something else 
end 

Ihr Vorgänger verwendet Capybara richtig da, wenn Sie sicher, eine Seite zu machen testen spezifischen Inhalt hat Sie sollten have_content verwenden. wird nie den Test nicht bestehen (nur leise zurückgeben und weitermachen). Wenn Ihre have_content Assertions fehlschlagen, weil die Website zu langsam ist, müssen Sie wahrscheinlich erhöhen Capybara.default_max_wait_time (oder herauszufinden, warum Seitenladezeiten so lang sind)

+0

Danke für die klare Erklärung! Ich versuchte hauptsächlich herauszufinden, warum es mit dem 'have content' eingerichtet wurde. Deine Erklärung macht vollkommen Sinn. – cin