Подтвердить что ты не робот

Нечувствительность к регистру Rspec

Я пишу тест Capybara и использую Rspec для утверждений. Мой тест терпит неудачу, потому что применяется стиль CSS, который вызывает текст во всех шапках. Как я могу переписать это так, чтобы это было нечувствительным к регистру утверждение?

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

Ответ 1

Здесь улучшается решение phoet:

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

К сожалению, подсветка синтаксиса здесь не оправдывает себя (это выглядит отлично в Sublime Text)

Ответ 2

Я столкнулся с этой проблемой, когда:

  • Использование драйвера полтергейста. (Я не знаю, случается ли это с другими драйверами)

  • Проверка page, а не page.body для ожиданий: expect(page).to ...

Итак, если я делаю expect(page.body).to ..., он просто работает и решает проблему.

Ответ 3

как использовать регулярное выражение?

"ALL CAPS".should match(/#{Regexp.escape('All Caps')}/i)

Ответ 4

Как насчет сокращения обоих концов утверждения?

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

Ответ 5

Синтаксис 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/ содержит информацию о том, где можно спрятать определения пользовательских совпадений в дереве проектов.

Ответ 6

Кроме того, если вы используете 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. Я потратил некоторое время на копирование исходного кода, и я все еще не могу понять, почему это работает.