Porque é que este teste de controlador de Rails falhando?
-
21-08-2019 - |
Pergunta
Eu estou tentando entender por que este teste está falhando. (Eu sou uma espécie de novo para testar.) Eu estou usando o framework built-in Rails testar com a adição da gema Shoulda.
O teste:
require 'shoulda'
context "on GET to :new" do
setup do
get(:new)
end
should_render_template :new
should_not_set_the_flash
end
falha:
1) Failure:
test: on GET to :new should render template :new. (SessionsControllerTest)
[/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/controller /macros.rb:220:in `__bind_1233882600_699194'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `call'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `test: on GET to :new should render template :new. '
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:
expecting <"new"> but rendering with <"">
2 tests, 2 assertions, 1 failures, 0 errors
Mas se eu executá-lo no console com app.get '/sessions/new'
trabalha muito bem com nenhum erro.
E o modelo "new
" torna como esperado no browser.
Eu estou usando Haml. Talvez isso está causando um problema. Meu modelo é chamado de "new.html.haml
".
Solução
O fracasso diz que nenhum modelo tenha sido prestado. Tente se certificar de que você não está sendo redirecionada com
should_respond_with :success
e afirmar o conteúdo do @ response.body só para ver o que está sendo enviado de volta ??p>
# This will fail but should give you some clue about what was sent back.
should "sent something back in the body" do
assert_match 'boohooo', @response.body
end
Você também pode valer um modelo específico, para que possa dar-lhe um tiro, também:
should_render_template "new.html.haml"
No entanto, eu não HAML suspeito de ser a causa do seu problema.
Outras dicas
Eu estava tendo um problema semelhante com Shoulda, Clearance, e Rails 2.3.2. Eu acho que resolveu o problema, modificando como deveria ter e uso de apuramento 'assert_template'. Aparentemente, há um bug aberto no Rails relacionado a isso.
Por favor, veja esta discussão para mais informações e meu diff das mudanças (uma mudança de linha em ambos os Apuramento e Shoulda).
http://groups.google.com/group/shoulda/browse_thread / thread / 8c0a66c80ff4fd76