2011-09-29 6 views
5

Я пишу тест контроллера для приложения rails 3.1 с использованием testunit 2.4.0.ArgumentError: сообщение assert должно быть String или Proc using assert_select

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

Я использую 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 передает неправильный тип объекта.

Можете ли вы посоветовать, как лучше всего следить за этим? Какие-нибудь работы?

+0

ли проблема что значение в ': text' должно быть строкой, а не шаблоном? – jefflunt

+0

Привет, нет, это вполне приемлемо для: текст должен быть регулярным – heathd

ответ

0

Таким образом, assert_select documentation показывает следующий пример, проходя блок в:

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 элементов равно нулю. Очевидно, вы изменили бы условия, чтобы они соответствовали тому, что вы пытаетесь протестировать, но делает ли это вас ближе к тому, что вам нужно?

0

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

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