2017-01-12 16 views
1

私はこれまでレールを学習するためのMichael Hartlチュートリアルに従ってきましたが、これまでかなりうまく行っていましたが、私が繰り返し遭遇した問題。私は、私の環境や他の何かに設定上の問題があるかどうかを知るには熟練していませんが、これは意味がありません。ActionController :: UrlGenerationError:ルートが一致しません{:action => "/ users/762146111"

私が実行しようとしているコントローラテストの中で、ヘルパーURLメソッドを動作させることはできません。例として:

test "should redirect home when not an admin" do 
    log_in_as(@other_user) 
    assert_no_difference 'User.count' do 
     delete user_path(@user) 
    end 
    assert redirect_to root_url  
    end 

は、次のエラーを生成します

test "should redirect index when not logged in" do 
    get users_path 
    assert_redirected_to login_url 
    end 

よう

ERROR["test_should_redirect_home_when_not_an_admin", UsersControllerTest, 0.9899668790167198] 
test_should_redirect_home_when_not_an_admin#UsersControllerTest (0.99s) 
ActionController::UrlGenerationError:   ActionController::UrlGenerationError: No route matches {:action=>"https://stackoverflow.com/users/762146111", :controller=>"users"} 
      test/controllers/users_controller_test.rb:60:in `block (2 levels) in <class:UsersControllerTest>' 
      test/controllers/users_controller_test.rb:59:in `block in <class:UsersControllerTest>' 

であっても、簡単なテストでは、同じエラーを生成:私はしました

ERROR["test_should_redirect_index_when_not_logged_in", UsersControllerTest, 1.5291320629185066] 
test_should_redirect_index_when_not_logged_in#UsersControllerTest (1.53s) 
ActionController::UrlGenerationError:   ActionController::UrlGenerationError: No route matches {:action=>"/users", :controller=>"users"} 
      test/controllers/users_controller_test.rb:34:in `block in <class:UsersControllerTest>' 

すべてこの問題についてのグーグルは、助けていない何らかの理由で私はuser_pathメソッド(または他の同様のメソッド)を何とか判断できないので、私のコントローラで取ろうとしているアクションがパスだと思っています!

ルートファイルが正しく設定されていることを確認しました。

Rails.application.routes.drawは

root 'static_pages#home' 
    get '/help'  => 'static_pages#help' 
    get '/about' => 'static_pages#about' 
    get '/contact' => 'static_pages#contact' 
    get '/signup' => 'users#new' 
    post '/signup' => 'users#create' 
    get '/login' => 'sessions#new' 
    post '/login' => 'sessions#create' 
    delete '/logout' => 'sessions#destroy' 
    get 'sessions/new' 
    resources :users 
end 

を行い、私は "レールのルート" を実行すると、正しいルートを持っていることをチェックしました。私はレールコンソールで "app.user_path(1)"が有効なパスを吐いていることをチェックしました。

この時点で私はちょうどこれらのヘルパーメソッドが助けにならないように見えない理由について困惑しています...私も彼らの実際に呼び出されていることはわかりませんので、私のグーグルはかなり無益でした。

はチュートリアルでこの問題を回避するために、私が動作しているようです

patch :edit, { id: @user }, params: { user: { name: @user.name, 
              email: @user.email }} 

それとも

test "should redirect index when not logged in" do 
    get :index 
    assert_redirected_to login_url 
    end 

のような構文を使用してきました。それが役に立つかどう

はまたここに私のテストファイルの1つです:

require 'test_helper' 

class UsersControllerTest < ActionController::TestCase 

    def setup 
    @user = users(:michael) 
    @other_user = users(:archer) 
    end 

    test "should get new" do 
    get :new 
    assert_response :success 
    end 

    test "should redirect edit when user not logged in" do 
    get :edit, params: { id: @user } 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

    test "should redirect update when user not logged in" do 
    patch :edit, { id: @user }, params: { user: { name: @user.name, 
               email: @user.email }} 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

    test "should redirect index when not logged in" do 
    # get users_path 
    get :index 
    assert_redirected_to login_url 
    end 


    test "should redirect destroy when not logged in" do 
    assert_no_difference 'User.count' do 
     delete user_path(@user) 
    end 
    assert redirect_to login_url 
    end 

    test "should redirect home when not an admin" do 
    log_in_as(@other_user) 
    assert_no_difference 'User.count' do 
     delete user_path(@user) 
    end 
    assert redirect_to root_url  
    end 

end 

は私が私が参考になるように投稿することができ、他のどのようなファイルお知らせください。

答えて

0

私は同じ問題を持っていたと私は交換ファイル「users_controller_test.rb」ファイルを変更することによって、それを修正:

class UsersControllerTest < ActionDispatch::IntegrationTest 

ため

class UsersControllerTest < ActionController::TestCase 

しかし、最初に、あなたのケースでは、あなたのことを確認してくださいチュートリアルが示すように

gem 'rails',  '5.0.1' 

:あなたのGemfileにラインを持っています。

私はまた、あなたが次のテストを持っていることがわかります。

test 'should get new' do 
    get :new 
    assert_response :success 
end 

あなたはあなたに上記のテストを変更する必要があります修正作るとき:

その後
test 'should get new' do 
    get new_user_path 
    assert_response :success 
end 

を、あなたを実行しますあなたはそれらをすべて通過させるべきです。

希望すると助かります

関連する問題