Testando helpers de bloco no RSpec
Leia em menos de um minuto
Uma coisa que gosto de fazer nos helpers é encapsular o conteúdo utilizando blocos.
# spec/fixtures/views/main.html.erb
<% main do %>
This is the main content!
<% end %>
Para utilizar a sintaxe acima, basta criar um helper como este:
# app/helpers/application_helper.rb
def main(&block)
concat content_tag(:div, capture(&block), :class => "main")
end
Não existe nenhuma maneira específica de testar esse tipo de helper; algumas pessoas sugerem criar um teste de view, enquanto outros escrevem verdadeiras gambiarras para fazer isso no próprio arquivo de testes de helpers. A maneira mais simples é derivada do teste de view.
Primeiro, crie uma view no diretório spec/fixtures/views/main.html.erb
; esse caminho não existirá, então você precisará criá-lo. Agora, crie o arquivo de specs em spec/views/main.html.erb_spec.rb
. O segredo está em adicionar um novo path de busca de views. Isso pode ser feito com o método ActionController::Base.prepend_view_path
.
Veja como ficará seu arquivo de teste.
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
ActionController::Base.prepend_view_path RAILS_ROOT + "/spec/fixtures/views"
describe "Containers" do
it "should render main helper" do
render "main.html.erb"
response.body.should have_tag("div.main", 1)
response.body.should have_tag("div.main", "This is the main content!")
end
end
Nada como a simplicidade!