2012-09-20 37 views
16

私はRSpecとCapybaraを初めて使っています。ページに時間があるかどうかテストしようとしています。 12:00または14:24または08:12は私がテストしようとしているものの良い例です。ページが正規表現を持っているかどうかを調べるCapybara

私は、次の正規表現を使用しています:

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

私はページが、この正規表現が含まれている場合「というフレーズには」カピバラにテストする方法がわからないです。

答えて

24

私は、例えば、

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

たり、新しいRSpecの構文

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

それとも、ページ全体が、いくつかの要素をテストすることができないとのようなものを想定したいです

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

ありがとうございました! page.textは廃止されますか? –

+1

私は信じていませんが、少なくとも近い将来にはそうはありません。たくさんの人が使っているように見え、それは読みやすいと思う。詳細については、[このブログの記事](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax)を参照してください。 – khustochka

+0

コンテンツを取得してから、カピバラ以外のマッチャーを結果は一致が発生するのを待つというCapybaraの機能性を損なう。このソリューションを使用すると、作業が完了する前にテキストを検索して、探しているテキストをそこに置くことができます。私はこれがカピバラの反パターンだと言っています。 –

11

これは新しい動作であれば、私は知らないが、あなただけのhas_content?を使用することができます。

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

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

は、それはこのようなものになるだろう

online documentation for capybaraにこれが見つかりましたが、has_text?からhas_content?は単なるエイリアスです。

+0

残念ながら、Capybaraは[DSLドキュメント](https://github.com/jnicklas/capybara#the-dsl)の大文字と小文字を区別しない検索をサポートしていません –

+1

これはxpathの検索であり、マッチャーではありません。 'have_content'は正規表現をとる' assert_text'に依存する 'has_text'のエイリアスである' has_content'によって定義されます。 Ruby正規表現エンジンは、カピバラのDSLではなく、正規表現がどのように一致するかを決定します。 https://github.com/jnicklas/capybara/blob/1a9417061c08194d9c4332cbbac186798cd5978a/lib/capybara/node/matchers.rb#L435 – Nerdmaster

関連する問題