2011-01-30 90 views
1

我通过迈克尔·哈特尔的on Rails的优秀教程的工作,但我在第11章Ruby on Rails的教程,第11章练习7 - 打破我的RSpec的测试

这项工作是具有与运动7烦恼:

Add a nested route so that /users/1/microposts shows all the microposts for user 1. (You will also have to add a Microposts controller index action and corresponding view.)

我已经成功地做到了这一点,通过改变我的routes.rb文件阅读:

resources :users do 
    resources :microposts, :only => [:create, :destroy] 
end 

我能够成功调用/用户/ 1/AB从微观柱rowser。但是,microposts_controller_spec.rb中的大多数测试现在都被破坏了。运行自动测试时收到“无路线匹配”错误。例如,第一个测试,它只是写着:

it "should deny access to 'create'" do 
    post :create 
    response.should redirect_to(signin_path) 
end 

现在产生以下错误:

1) MicropostsController access control should deny access to 'create' Failure/Error: post :create No route matches {:controller=>"microposts", :action=>"create"}

当我检查rake routes

,我觉得这是项:

user_microposts POST /users/:user_id/microposts(.:format)  {:action=>"create", :controller=>"microposts"} 

这表明路线确实存在。

在完成本教程时是否有其他人遇到此问题?一旦我引入嵌套路线,是否需要在spec文件中进行更改? Rspec是否使用嵌套路线?

感谢

回答

2

因为这是你需要通过user_id通过嵌套的路线:

some_user = way_of_creating_a_user_goes_here 
post :create, :user_id => some_user.id 

的RSpec会尝试去/microposts路线没有这个参数。

+0

感谢您的回答瑞安。我以为我尝试了这一点,但显然我没有这么做 - 你的解决方案迄今为止工作。 – Kevin 2011-01-30 21:57:49

相关问题