end[/code]Acho que até o primeiro assert está ok, mas não sei se a linha seguinte (5) está correta. Se ela estiver, as tentativas de verificar se o comentário foi adicionado estão corretas? Obrigado! :thumbup:
-editado -
-> na linha 2 substitua o nome da variavel post, para não confundir com o o método post da linha 5(o primeiro da linha)
-> na linha 5 utilize o post.idao invés de b.id[/b].
Oi diguix, na verdade, a forma como eu postei já funciona, eu gostaria de saber se foi feito da forma correta. Alterando de acordo com as suas sugestões funcionou da mesma forma.
O que eu gostaria de saber é o seguinte, se a linha 5 está correta, e se os asserts abaixo dela estão fazendo a verificação da forma correta, e, no caso, qual dos dois é o “mais correto”, ou mais adequado.
eu acredito que as duas formas estão corretas, porém nunca fiz testes em ruby/rails(erro meu…) talvez conseguisse uma boa resposta no grupo do google rails-br,o pessoal lá é bem ativo.
Acredito que a melhor coisa a se fazer neste teste é testar o “comportamento”, ou seja, vc teria que fazer o assert do post se ele foi atualizado, e se um comentário novo foi criado…
Aconselho vc a dar uma lida nos testes prontos criados pelo script/generate Scaffold… eles podem ser um ótimo ponto de partida…
[quote=tchandy][quote]
post = posts(:one)
assert post.update_attributes(:title => ‘Homework’)
[/quote]
Essa parte do teste só está testando o método update_attributes, do Active Record, então não tem o porquê de testar…[/quote]
Aqui eufaçoo update do titulo, e o assert diz se foi feito corretamente, não é isso? Como devo fazer?
[quote=tchandy][quote]
post ‘/posts/post_comment’, :comment => {:post_id=> (:post).id, :comment => “test comment”}
assert :comment, post.comments.last
assert assigns(:comment).valid? [/quote]
Acredito que a melhor coisa a se fazer neste teste é testar o “comportamento”, ou seja, vc teria que fazer o assert do post se ele foi atualizado, e se um comentário novo foi criado…[/quote]
Sim, é o que quero fazer, e achei que a forma como fiz era a correta. Acho que não entendi direito :roll:
Lendo o tutorial, consegui chegar à seguinte solução:
def test_should_add_comment
post '/posts/post_comment', :comment => {:post_id=> posts(:one).id, :comment => "comentario"}
assert assigns(:comment).valid?
assert_redirected_to :action => 'show'
end Esse teste está correto, o que está com um problema que ainda não resolvi é o seguinte:
def test_should_update_post
put '/posts/update', :id => posts(:one).id, :title => "titulo"
assert_equal 'titulo', posts(:one).find.title # Erro!
assert_redirected_to post_path(assigns(:post))
endEle reclama que o método find não existe, o qual, pelo que entendi, traria o post alterado para verificação. Se eu usar posts(:one).title, o teste não bate, pois ele compara com o valor original do post.
Como devo fazer para trazer o valor alterado do post para verificação? Vlw! :thumbup:
tchandy, usando o assigns(:post).title obtenho o seguinte erro:
1) Error:
test_should_update_post(UpdateFirstPostAndAddCommentTest):
NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.titleTá complicado! :roll:
1) Error:
test_should_update_post(UpdateFirstPostAndAddCommentTest):
NoMethodError: undefined method `[]' for :update:SymbolMas o que você está sugerindo é um teste funcional, e não um de integração, correto?
Vou te adicionar no gtalk pra gente conversar, vlw!