2014-03-18 62 views
1

我得到這個錯誤:邁克爾·哈特爾教程,沒有路由匹配

Failures:

1) UsersController DELETE 'destroy' should sign a user out

Failure/Error: delete :destroy 
ActionController::UrlGenerationError: 
    No route matches {:controller=>"users", :action=>"destroy"} 

我的測試是:

it "should sign a user out" do 
    test_sign_in(Factory(:user)) 
    delete :destroy 
    expect(controller).to_not be_signed_in 
    expect(response).to redirect_to(root_path) 
end 

的test_sign_in功能是spec幫手:

def test_sign_in(user)

controller.sign_in(user) 

end

我耙路線:

 Prefix Verb URI Pattern    Controller#Action 
sessions_new GET /sessions/new(.:format) sessions#new 
    users GET /users(.:format)   users#index 
     POST /users(.:format)   users#create 
new_user GET /users/new(.:format)  users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
    user GET /users/:id(.:format)  users#show 
     PATCH /users/:id(.:format)  users#update 
     PUT /users/:id(.:format)  users#update 
     DELETE /users/:id(.:format)  users#destroy 
sessions POST /sessions(.:format)  sessions#create 
new_session GET /sessions/new(.:format) sessions#new 
session DELETE /sessions/:id(.:format) sessions#destroy 
    root GET /      pages#home 
contact GET /contact(.:format)  pages#contact 
    about GET /about(.:format)   pages#about 
    help GET /help(.:format)   pages#help 
    signup GET /signup(.:format)   users#new 
    signin GET /signin(.:format)   sessions#new 
signout GET /signout(.:format)  sessions#destroy 
pages_home GET /pages/home(.:format)  pages#home 

任何人都知道我該如何解決這個錯誤?

回答

1

您的路線定義爲

DELETE /users/:id(.:format)  users#destroy 

這意味着航線期待像

DELETE /users/4 

在您的測試看,你只是要求DELETE /users,這是從這個錯誤信息導出:

ActionController::UrlGenerationError: No route matches {:controller=>"users", :action=>"destroy"}) 

所以,你需要修改你的測試t o處理路線的:id部分。這是未經測試,但你大致尋找:

user = Factory(:user) 
test_sign_in(user) 
delete :destroy, id: user.id 
+0

我做到了。我收到以下錯誤:1)UsersController刪除'銷燬'應簽署用戶出 失敗/錯誤:刪除:銷燬,ID:user.id AbstractController :: ActionNotFound: **行動'銷燬'不能找到UsersController **你能幫我這個嗎? – madam

+0

其實我正在看我的路線,我按照教程,我認爲**這**是我嘗試使用的路線:註銷GET /signout(.:format)會話#銷燬 – madam

+0

你應該是能夠使用:'get:signout'在這種情況下。 UsersController找不到'The action'destroy'錯誤,意味着你的'UsersController'裏面沒有'destroy'的操作。這很有道理,對吧?因爲你的'destroy'動作存在於'SessionsController'內部,所以你應該在'SessionsController'規範中測試註銷功能,而不是'UsersController'。希望這有助於! –

0

ooooh上帝!我發現了錯誤。我不小心在users_controller_spec中編寫代碼,我應該在sessions_controller_spec中執行此操作。 感謝安德烈亞斯試圖幫助!

+0

對不起,剛剛在輸入該回復後看到此條目! –

相關問題