2012-09-20 5 views
16

Ich bin neu in RSpec und Capybara und ich versuche zu testen, ob Seite eine Zeit darauf hat. 12:00 oder 14:24 oder 08:12 sind gute Beispiele für das, was ich versuche zu testen.Capybara testet, ob Seite regulären Ausdruck hat

Ich bin mit dem folgenden regulären Ausdruck:

/^\d{2}:\d{2}/ 

Ich bin nicht sicher, wie man „Phrase es“ in Capybara zu testen, ob die Seite dieses Regex enthält.

Antwort

24

würde ich so etwas wie

annehmen
page.text.should match(/^\d{2}:\d{2}/) 

oder mit der neuen RSpec Syntax

expect(page.text).to match(/^\d{2}:\d{2}/) 

Oder Sie können nicht die ganze Seite testen, aber ein Element, z.B.

find("span.time").text.should match(/^\d{2}:\d{2}/) 
+0

Vielen Dank! Wird page.text veraltet sein? –

+1

Ich glaube nicht, zumindest nicht in der nächsten Zukunft. Scheint so, als ob viele Leute es benutzen und es für gut halten. Für weitere Details siehe [diesen Blog-Beitrag] (http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax) – khustochka

+0

Beachten Sie, dass Inhalt abrufen und dann nicht-Capybara-Matcher auf der Das Ergebnis unterbricht die Capybara-Funktionalität des Wartens auf eine Übereinstimmung. Wenn Sie diese Lösung verwenden, werden Sie wahrscheinlich den Text abrufen, bevor die Arbeit ausgeführt wurde, um den Text dorthin zu bringen, nach dem Sie suchen. Ich würde so weit gehen zu sagen, dass dies ein Capybara Anti-Muster ist. –

11

Ich weiß nicht, ob dieses neue Verhalten ist, aber Sie können nur has_content? verwenden:

page.has_content?(/do not have permission/i)

In rspec, das wäre so etwas wie dieses:

expect(page).to have_content(/do not have permission/i)

Ich fand dies in der online documentation for capybara, aber es ist unter has_text? seit ist nur ein Alias.

+0

Capybara unterstützt leider keine Suche nach Groß- und Kleinschreibung in der [DSL-Dokumentation] (https://github.com/jnicklas/capybara#the-dsl) –

+1

Das ist für die Xpath-Suche, nicht die Matcher. 'have_content' ist definiert durch' has_content', ein Alias ​​für 'has_text', der auf' assert_text' basiert, der eine Regex verwendet. Ruby Regex-Engine bestimmt, wie eine Regex etwas entspricht, nicht Capybara's DSL. https://github.com/jnicklas/capybara/blob/1a9417061c08194d9c4332cbbac186798cd5978a/lib/capybara/node/matchers.rb#L435 – Nerdmaster