Ответ 1
Здесь улучшается решение phoet:
page.body.should match(%r{#{string}}i)
К сожалению, подсветка синтаксиса здесь не оправдывает себя (это выглядит отлично в Sublime Text)
Я пишу тест Capybara и использую Rspec для утверждений. Мой тест терпит неудачу, потому что применяется стиль CSS, который вызывает текст во всех шапках. Как я могу переписать это так, чтобы это было нечувствительным к регистру утверждение?
"ALL CAPS".should include('All Caps')
Здесь улучшается решение phoet:
page.body.should match(%r{#{string}}i)
К сожалению, подсветка синтаксиса здесь не оправдывает себя (это выглядит отлично в Sublime Text)
Я столкнулся с этой проблемой, когда:
Использование драйвера полтергейста. (Я не знаю, случается ли это с другими драйверами)
Проверка page
, а не page.body
для ожиданий: expect(page).to ...
Итак, если я делаю expect(page.body).to ...
, он просто работает и решает проблему.
как использовать регулярное выражение?
"ALL CAPS".should match(/#{Regexp.escape('All Caps')}/i)
Как насчет сокращения обоих концов утверждения?
"ALL CAPS".downcase.should include('All Caps'.downcase)
Синтаксис 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/ содержит информацию о том, где можно спрятать определения пользовательских совпадений в дереве проектов.
Кроме того, если вы используете Capybara, , вы можете использовать have_content
, который нечувствителен к регистру:
<h1>ALL CAPS</h1>
find('h1').should have_content('All Caps')
Забастовкa >
Обновление: Я думаю, что я был частично неправ. Рассмотрим это:
<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. Я потратил некоторое время на копирование исходного кода, и я все еще не могу понять, почему это работает.