我正在寫水豚測試並使用Rspec進行斷言。我的測試失敗了,因爲應用了CSS樣式,導致文本全部大寫。我如何重寫這個以便它不區分大小寫的斷言?不區分大小寫的Rspec匹配
"ALL CAPS".should include('All Caps')
我正在寫水豚測試並使用Rspec進行斷言。我的測試失敗了,因爲應用了CSS樣式,導致文本全部大寫。我如何重寫這個以便它不區分大小寫的斷言?不區分大小寫的Rspec匹配
"ALL CAPS".should include('All Caps')
這裏的改進上phoet的解決方案:
page.body.should match(%r{#{string}}i)
不幸的是,語法這裏強調沒有做多義(它看起來在崇高的文本完美的罰款)
如何使用正則表達式來做到這一點?
"ALL CAPS".should match(/#{Regexp.escape('All Caps')}/i)
另外,如果你是使用水豚,
您可以使用不區分大小寫的
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文本。我花了一段時間仔細研究源代碼,但仍然無法弄清楚爲什麼這會起作用。
我只遇到此問題時:
使用吵鬧鬼司機。 (我不知道是否這也與其他車手發生)
檢查page
,不page.body
的期望:expect(page).to ...
所以,如果我做expect(page.body).to ...
它只是工作和解決的問題。
這正是我的問題,謝謝! – mistertim
Rspec語法在4年內發生了顯着變化,但這個潛在問題似乎仍然是一個問題。我的解決方案是構建一個自定義匹配器has_content_i
,它與has_content
類似,但是不區分大小寫。結果調用看起來像:
expect(page).to have_content_i("All Caps")
這裏的源:
RSpec::Matchers.define :have_content_i do |expected|
match do |actual|
actual.text =~ /#{Regexp.quote expected}/i
end
failure_message do |actual|
"expected to find text #{expected.inspect} case insensitively in #{actual.text.inspect}"
end
failure_message_when_negated do |actual|
"expected to not to find text #{expected.inspect} case insensitively in #{actual.text.inspect}"
end
end
http://danielchangnyc.github.io/blog/2014/01/15/tdd2-RSpecMatchers/有在哪裏藏匿在你的項目樹中的自定義匹配定義的信息。
美麗的解決方案 – bruno077
這也適用於水豚發現者。例如: 'page.find'li.line-item',text:%r {Awesome Line Item} i' –
或'page.find'li.line-item',text:/#{Awesome Line Item }/i',如果你喜歡斜槓語法。 (在Sublime Text的正則表達式中添加括號以獲得正確的語法高亮。) – LouieGeetoo