Rspec e os testes para diferentes formatos

Essa será rápida. Há um comportamento estranho nos testes do Rspec para diferentes formatos de página. Se você usar:

get :index, :format => :xml

você terá uma resposta 406 “Not Acceptable”. Pior, no test.log vai ver que a url foi gerada corretamente. A solução é passar o teste para

get :index, :format => 'xml'

Que a url será testada corretamente e o teste não vai retornar uma resposta 406. Daqui pra baixo eu explico o motivo desses testes.

É raro necessitarmos testar o comportamento da action para diferentes tipos de resposta, mais acontece. E toda vez esqueço desse comportamento esquisito do Rspec. De vez em quando nos deparamos aqui na Riopro com actions que geram dados diferentes de acordo com o formato de resposta. Para explicitar, imagine que estamos mostrando a action index de uma lista de usuários nos formatos xml e html.


http://localhost/users.html
http://localhost/users.xml

Ambos os casos retornam a lista de usuários, certo? Bom, no exemplo que eu quero dar, às vezes não. Porque a versão html pode mostrar os dados paginados enquanto a versão xml mostrará todos os usuários. Continuando nosso exemplo, algo como:


respond_to do |format|
format.html do
@users = User.paginate( params[:page] )
end
format.xml do
@users = User.all
render :xml => @users.to_xml
end
end

Nesses casos, testes específicos para cada formato do controller são necessários. Só para documentar melhor, os exemplos dados acima usam o Rspec 1.2.8 e o Rspec-rails 1.2.7.1.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *