ArgumentError: сообщение подтверждения должно быть String или Proc с использованием assert_select

Я пишу тест контроллера для приложения rails 3.1, используя testunit 2.4.0.

Я хочу утверждать, что определенный заголовок не отображается на странице.

Я использую assert_select следующим образом:

assert_select 'h1', {:text => /Key Dates/, :count => 0}

и получить следующую ошибку:

ArgumentError: assertion message must be String or Proc: <</Key Dates/>
expected but was <"Planner Maternity leave">.>(<Test::Unit::Assertions::AssertionMessage>)

Я отследил это до того факта, что assert_select вызывает build_message, который создает экземпляр AssertionMessage и передает его тестовому модулю assert. Однако в версии 2.2 testunit (февраль 2011 г.) были добавлены проверки, которые проверяют тип передаваемого сообщения. Эти проверки запускают ArgumentError, показанный выше.

Я не уверен, связана ли ошибка с чрезмерно строгим тестовым блоком или с утверждением_select, передающим неправильный тип объекта.

Не подскажете, как лучше поступить? Любые обходные пути?


person heathd    schedule 29.09.2011    source источник
comment
Проблема в том, что значение в :text должно быть строкой, а не шаблоном?   -  person jefflunt    schedule 10.10.2011
comment
Привет, нет, вполне приемлемо, чтобы :text был регулярным выражением.   -  person heathd    schedule 09.11.2011


Ответы (2)


Итак, документация по утверждению_select показывает следующий пример передачи блока:

assert_select "ol" do |elements|
  elements.each do |element|
    assert_select element, "li", 4
  end
end

Так что, если бы вы сделали что-то вроде...

assert_select 'h1' do |elements|
  elements.length == 0 ? fail
  elements.each do |element|
    element.text ~= /Key Dates/ ? fail
  end
end

Что в основном терпит неудачу, если он находит шаблон ИЛИ, если количество элементов h1 равно нулю. Очевидно, вы бы изменили условия, чтобы они соответствовали тому, что вы пытаетесь проверить, но приближает ли это вас к тому, что вам нужно?

person jefflunt    schedule 09.11.2011

Если вы не можете обновить версию без ошибок, вы можете просто передать третий аргумент (сообщение), чтобы не создавать сообщение принудительно:

assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."

person Arsen7    schedule 26.02.2014