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.


