24

私はカピバラ テストを作成し、アサーションに Rspec を使用しています。テキストがすべて大文字になる CSS スタイルが適用されているため、テストが失敗します。大文字と小文字を区別しないアサーションになるように、これを書き直すにはどうすればよいですか?

"ALL CAPS".should include('All Caps')
4

6 に答える 6

31

phoetのソリューションを改善します。

page.body.should match(%r{#{string}}i)

残念ながら、ここで強調表示されている構文は、それほど正義ではありません(Sublime Textでは完全に正常に見えます)

于 2012-07-18T14:39:31.947 に答える
7

この問題が発生するのは、次の場合のみです。

  • ポルターガイストドライバー使用。(これが他のドライバーでも起こるかどうかはわかりません)

  • 期待のためpageではなく、検査中:page.bodyexpect(page).to ...

だから、私がやれば、それはうまくいきexpect(page.body).to ...、問題を解決します。

于 2014-05-08T12:30:30.217 に答える
6

これを行うために正規表現を使用するのはどうですか?

"ALL CAPS".should match(/#{Regexp.escape('All Caps')}/i)
于 2012-07-03T18:01:26.163 に答える
6

アサーションの両端を小文字にするのはどうですか?

"ALL CAPS".downcase.should include('All Caps'.downcase)
于 2012-07-03T18:03:28.650 に答える
3

また、Capybaraを使用している場合は、大文字と小文字を区別しないマッチャーを使用できます。have_content

<h1>ALL CAPS</h1>

find('h1').should have_content('All Caps')

更新:私は部分的に間違っていたと思います。このことを考慮:

<h1 style="text-transform: uppercase">Title Case</h1>

puts find('h1').text
# TITLE CASE  < notice all caps

puts find('h1').has_content?('Title Case')  # true

puts find('h1').has_content?('TITLE CASE')  # false

puts find('h1').has_content?('title case')  # false

返されるテキストがすべて大文字であるのは不思議ですが(CSSの後にどのようにスタイル設定されているか)、マッチャーは実際にはスタイル設定されていないHTMLのテキストに対してテストしています。ソースコードを掘り下げてしばらく過ごしましたが、なぜこれが機能するのかまだわかりません。

于 2012-07-25T15:42:04.773 に答える