Как протестировать помощников по блокировке рельсов с помощью RSpec

#ruby-on-rails #rspec #helper

Вопрос:

В моих представлениях я использую помощник, который принимает произвольный HTML в качестве блока:

 <% some_block_helper do %>
  Some arbitrary HTML and ERB variables here.
  More HTML here.
<% end %>
 

Мой помощник делает кучу вещей с переданным блоком HTML, прежде чем вернуть его в представление (уценка и другое форматирование). Я хотел бы знать, каковы наиболее чистые способы проверки результата вызова помощника в RSpec, если таковые имеются. Я нашел несколько примеров, которые путаются с частными методами ERB, но это кажется немного хрупким и трудным для чтения.

Ответ №1:

Чтобы добавить немного к тому, что сказал Джеймс, я думаю, что что-то подобное должно сработать просто отлично:

 describe SomeHelper do
  it 'should do something' do
    helper.some_block_helper { the_block_code }.should XXXX
  end
end
 

Ответ №2:

  1. Для функционального теста напишите спецификацию обычного представления и проверьте результат.
  2. Чтобы модульно протестировать вашего помощника, передайте ему произвольную строку ввода html напрямую.

Если есть какие-либо другие трудности, которые я упускаю, пожалуйста, прокомментируйте?

Комментарии:

1. Поскольку тест написан на Ruby, а не в шаблоне, неясно, как воспроизвести поведение размещения HTML за пределами тегов ERB между do и end .

Ответ №3:

Вот еще один пример, который расширяет ответ Кэмерона

 describe SomeHelper do
  it 'should do something' do
    content = lambda { "blah" }                                
    result  = helper.some_block_helper(amp;content)

    result.should include("blah")
    result.should XXX
  end
end