2012-09-20 12 views
16

Jestem nowy w RSpec i Capybara i próbuję sprawdzić, czy strona ma na to czas. 12:00 lub 14:24 lub 08:12 są dobrymi przykładami tego, co próbuję przetestować.Testowanie kapibara, jeśli strona ma wyrażenie regularne

Używam następujące wyrażenia regularnego:

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

nie jestem pewien, jak „to wyrażenie” w kapibary aby sprawdzić, czy strona zawiera ten regex.

Odpowiedz

24

bym przypuszczać coś podobnego

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

lub z nowym RSpec składni

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

Albo można przetestować a nie całą stronę, ale jakiś element, na przykład

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

Dziękujemy! Czy strona page.text będzie przestarzała? –

+1

Nie wierzę, przynajmniej nie w najbliższej przyszłości. Wygląda na to, że wiele osób go używa i uważa, że ​​dobrze się czyta. Aby uzyskać więcej informacji, zobacz [ten wpis na blogu] (http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax). – khustochka

+0

Należy zwrócić uwagę na pobieranie treści, a następnie używanie narzędzi innych niż Capybara Wynik przerywa działanie funkcji Capybara polegającej na oczekiwaniu na mecz. Korzystając z tego rozwiązania, prawdopodobnie pobierzesz tekst przed wykonaniem pracy, aby umieścić tam tekst, którego szukasz. Posunąłbym się do stwierdzenia, że ​​jest to anty-wzór kapibara. –

11

Nie wiem, czy jest to nowe zachowanie, ale można po prostu użyć has_content?:

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

W RSpec, to byłoby coś takiego:

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

Znalazłem to w online documentation for capybara, ale jest pod has_text? od has_content? to tylko alias.

+0

Niestety, Capybara nie obsługuje wyszukiwań niewrażliwych na wielkość liter na [dokumentacja DSL] (https://github.com/jnicklas/capybara#the-dsl) –

+1

To jest wyszukiwanie za pomocą xpath, a nie dopasowywanie. 'have_content' jest zdefiniowane przez' has_content', alias dla 'has_text', który opiera się na' assert_text', który pobiera wyrażenie regularne. Silnik regex z Ruby określa, w jaki sposób regex pasuje do czegoś, a nie na DSL kapibara. https://github.com/jnicklas/capybara/blob/1a9417061c08194d9c4332cbbac186798cd5978a/lib/capybara/node/matchers.rb#L435 – Nerdmaster