Teste do controlador RSpec - resposta em branco.body


103

Estou preso a um problema ao testar meus controladores com RSpec - a chamada response.body sempre retorna uma string vazia. No navegador, tudo é renderizado corretamente, e os testes de recursos do pepino parecem acertar, mas o RSpec falha todas as vezes.

Outras expectativas sobre o objeto de resposta, como response.should render_template('index') passar sem problemas.

Algum de vocês já encontrou esse problema antes? Talvez a resposta html possa ser obtida de alguma outra forma?

Quanto às versões, Rails 2.1.0, RSpec 1.2.7.

Respostas:


194

Por padrão, rspec-rails hackeia o Rails para impedi- lo de realmente renderizar templates de visão. Você deve apenas testar o comportamento de suas ações e filtros, seus testes de controlador, não o resultado da renderização do template - é para isso que servem as especificações de visão.

No entanto, se você deseja fazer com que as especificações do controlador renderizem os modelos como o aplicativo faria normalmente, use a render_viewsdiretiva:

describe YourController do
  render_views
  ...
end

2
Obrigado, exatamente o que eu precisava.
Toms Mikoss

2
Trabalho com Rails há anos e agora finalmente entendo a diferença entre as especificações do controlador e do pedido. Obrigado!
Brian Underwood de


2

Como eu trabalhava com um problema semelhante (que me levou a esta questão), me ocorreu que existem diferentes maneiras de tirar a pele do mesmo gato. Em outras palavras, em vez de verificar o corpo do texto, você pode verificar o conteúdo do flash.

response.body.should =~ /Invalid email or password/

pode ser um cheque equivalente a:

flash[:alert].should == "Invalid email or password"

Para mim, este último parece um pouco mais flexível, pois funcionará de qualquer maneira, mas pode não ser apropriado em todos os casos.

Felicidades,

John


2

Por padrão, a configuração RSpec-rails desativa a renderização de modelos para especificações de controlador

Uma das maneiras de corrigir isso é habilitar a render_viewsconfiguração em seu rails_helper.rbarquivo. Desta forma, você o torna capaz de trabalhar globalmente em todos os seus testes.

RSpec.configure do |config|
  config.render_views
end

Ou use a declaração render_views para um grupo individual:

describe User do
  render_views
end

Você pode ler mais sobre isso aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.