#ruby-on-rails #ruby #ruby-on-rails-3.1 #testunit
#ruby-on-rails #ruby #ruby-on-rails-3.1 #testunit
Вопрос:
Я пишу тест контроллера для приложения 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
показанное выше.
Я не уверен, заключается ли ошибка в том, что тестовый модуль является чрезмерно строгим или assert_select передает неправильный тип объекта.
Можете ли вы посоветовать, как лучше всего следовать этому? Какие-либо обходные пути?
Комментарии:
1. Проблема в том, что значение в
:text
должно быть строкой, а не шаблоном?2. Привет, нет, вполне приемлемо, чтобы :text был регулярным выражением
Ответ №1:
Итак, документация assert_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
элементов равно нулю. Очевидно, что вы изменили бы условия, чтобы они соответствовали тому, что вы пытаетесь протестировать, но приближает ли это вас к тому, что вам нужно?
Ответ №2:
Если вы не можете перейти на версию без ошибок, вы можете просто передать третий аргумент (сообщение), чтобы не создавать принудительное сообщение:
assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."