oliver
95 posts
|
galera, to quebrando a cabeça para aprender a testar controllers com o rspec :P
como eu faço para gerar o post certo para um teste de criação de um nested resource?
tenho esses routes:
e estou testando a criação de um work assim:
before(:each) do
category = mock_model(Category, {:id => 1, :to_param => "1", :works => [work]})
@work = mock_model(Work, :to_param => “1”)
category.works.stub!(:build).and_return(work)
end
describe “with successful save” do
def do_post
@work.should_receive(:save).and_return(true)
post :create, :work => {}, :category_id => 1
end
it “should create a new work” do
category.works.should_receive(:build).with({}).and_return(work)
do_post
end
it “should redirect to the new work” do
do_post
response.should redirect_to(work_url(category,work))
end
end
end
que me dá o seguinte erro:
1)
ActionController::RoutingError in ‘WorksController handling POST /categories/1/works with successful save should create a new work’
work_url failed to generate from {:category_id=>#<Work:0×1a3685c @name="Work_1048">, :controller=>"works", :action=>"show"}, expected: {:controller=>"works", :action=>"show"}, diff: {:category_id=>#<Work:0×1a3685c @name="Work_1048">}
(eval):17:in `work_url’
/Users/oliver/Sites/portfolio/app/controllers/works_controller.rb:50:in `create’
/Users/oliver/Sites/portfolio/app/controllers/works_controller.rb:47:in `create’
/Users/oliver/Sites/portfolio/vendor/plugins/haml/lib/sass/plugin/rails.rb:14:in `process_without_test’
./spec/controllers/works_controller_spec.rb:207:in `do_post’
./spec/controllers/works_controller_spec.rb:212:
2)
ActionController::RoutingError in ‘WorksController handling POST /categories/1/works with successful save should redirect to the new work’
work_url failed to generate from {:category_id=>#<Work:0×1a2d374 @name="Work_1051">, :controller=>"works", :action=>"show"}, expected: {:controller=>"works", :action=>"show"}, diff: {:category_id=>#<Work:0×1a2d374 @name="Work_1051">}
(eval):17:in `work_url’
/Users/oliver/Sites/portfolio/app/controllers/works_controller.rb:50:in `create’
/Users/oliver/Sites/portfolio/app/controllers/works_controller.rb:47:in `create’
/Users/oliver/Sites/portfolio/vendor/plugins/haml/lib/sass/plugin/rails.rb:14:in `process_without_test’
./spec/controllers/works_controller_spec.rb:207:in `do_post’
./spec/controllers/works_controller_spec.rb:216:
qual é o problema com o meu do_post? não sei se é o meu cérebro é que já fritou por hoje, mas não estou vendo como um objeto Work está sendo passado para o :category_id.
alguma luz?
[]s
Oliver
|
antonio
196 posts
|
dia Oliver ;)
deixa eu fazer uma pergunta antes, você consegue rodar seus testes normalmente com a biblioteca tradicional?
|
oliver
95 posts
|
oi Antonio,
então, não estou testando com o test::unit… a intenção é aprender a testar usando só o rspec mesmo.
mas imagino que também não passaria, afinal eu teria que simular um post da mesma maneira, e acho que o erro está na interpretação de como gerar este post
|
oliver
95 posts
|
acabei tirando o :name_prefix => nil, e mudando o work_url() para category_work_path(), e funcionou. tirar o :name_prefix acabou dando mais dor de cabeça que qualquer coisa :P
|
excel
3 posts
|
Duvida !!!
Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.
Isso poderia ser afirmado ?
Att.
Excel
|
oliver
95 posts
|
oi excel, não sei te responder, mas acho que você vai ter mais sorte se você postar a sua dúvida num post separado…
|
Fabio Kung
16 posts
|
Ruby tem duas coisas que melam a vida de quem quer fazer metaprogramação mais hardcode. Não existe como sobrescrever o mecanismo de resolução de nomes e tão pouco como definir escopos no qual alterações a classes acontecem.
Isso poderia ser afirmado ?
Att. Excel
Excel, podia ao menos citar a fonte:
http://forum.rubyonbr.org/forums/1/topics/2783
Você é o Marcio Duran do GUJ?
|