1
require 'test_helper' 

    class MyTest < ActionController::IntegrationTest 

     test "view posts from login page" do 
     visit("/logins/new") 
     find_field('Username').set('abode') 
     find_field('Password').set('efghi') 
     click_link_or_button('Login') 
     assert page.has_content?('Signed in!') 
     end 

     test "go to new user page" do 
     visit("/logins/new") 
     click_link("New user?") 
     assert (current_path == "https://stackoverflow.com/users/new") 
     end 

    end 

    Error: 
test_view_posts_from_login_page(MyTest): 
ActionController::RoutingError: No route matches [POST] "/logins/new" 
    test/integration/view_posts_test.rb:12:in `block in <class:MyTest>' 

它顯示錯誤的第12行。按鈕「登錄」或/登錄/新路徑有問題嗎?第二次測試通過,所以路徑應該是正確的?我究竟做錯了什麼?ActionController :: RoutingError:沒有路由匹配[POST]

謝謝!

回答

3

真的很難說這裏發生了什麼。一般來說,如果你問一個有關路由錯誤的問題,你應該發佈你的routes.rb文件中的內容。

這就是說,我認爲無論HTML爲表格生成,它的操作都會被錯誤地指定。

實施例路線:

tags GET /tags(.:format)    {:action=>"index", :controller=>"tags"} 
     POST /tags(.:format)    {:action=>"create", :controller=>"tags"} 
new_tag GET /tags/new(.:format)   {:action=>"new", :controller=>"tags"} 
edit_tag GET /tags/:id/edit(.:format)  {:action=>"edit", :controller=>"tags"} 
    tag GET /tags/:id(.:format)   {:action=>"show", :controller=>"tags"} 
     PUT /tags/:id(.:format)   {:action=>"update", :controller=>"tags"} 
     DELETE /tags/:id(.:format)   {:action=>"destroy", :controller=>"tags"} 

通知那裏說POST在第二列中那裏。這意味着新對象表單的action屬性應該設置爲/ tags。在那裏告訴Rails在標籤控制器中呈現創建動作。登錄模式也是如此。

至於什麼表單的HTML代碼實際上看起來,它可能看起來沿着線的東西:

<form ... action="/logins/new" ...>...</form> 

當它應該是

<form ... action="/logins" ...>...</form> 

希望這有助於。

+0

是的,它的ID幫助。我意識到我的錯誤。增加了'match'/ logins/new',:controller =>'logins',:action =>'new' resources:logins' and its working now。謝謝! – Ava

+0

我不確定你爲什麼想要那裏的比賽聲明? '資源:登錄'應該是你需要的一切。 –

+0

+1這確實有幫助。 –

0

我認爲你的視圖文件中的表單有一個空白action-屬性,因此它將表單發佈到/logins/new而不是例如。 /logins這可能會映射到您的create-操作。

相關問題