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 == "/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 行目のエラーが表示されます。「ログイン」ボタンまたは /logins/new パスに問題がありますか? 2 番目のテストはパスしますが、パスは正しいはずですか? 私は何を間違っていますか?

ありがとう!

4

2 に答える 2

5

ここで何が起こっているのかを伝えるのは本当に難しいです。一般に、ルーティング エラーについて質問する場合は、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"}

そこの 2 列目に POST と表示されていることに注目してください。つまり、新しいオブジェクト フォームのアクション属性は /tags に設定する必要があります。これにより、Rails はタグ コントローラーで作成アクションをレンダリングするように指示されます。同じことがログイン モデルにも当てはまります。

フォームの HTML コードが実際にどのように見えるかについては、おそらく次のようになります。

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

あるべきとき

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

お役に立てれば。

于 2011-10-13T21:47:55.783 に答える