2011-01-30 89 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

相關問題