我正在写水豚测试并使用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