2016-07-07 11 views
0

Ich beende Michael Hartl die Schienen Tutorial und bin hier stecken https://www.railstutorial.org/book/following_users#code-show_follow_viewDebug-Testverfahren in Schienen

Fehler in test/controllers/users_controller_test.rb verursacht durch:

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

test "should redirect following when not logged in" do 
    get following_user_path(@user) 
    assert_redirected_to login_url 
end 

Fehlermeldung:

 1) Error: 
    UsersControllerTest#test_should_redirect_following_when_not_logged_in: 
    ActionController::UrlGenerationError: No route matches {:action=>"https://stackoverflow.com/users/762146111/following", :controller=>"users"} 
     test/controllers/users_controller_test.rb:62:in `block in <class:UsersControllerTest>' 

Die @user im Setup wird von test/fixtures/users.yml:

gezogen
michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 
    admin: true 
    activated: true 
    activated_at: <%= Time.zone.now %> 

routes.rb:

resources :users do 
    member do 
    get :following, :followers 
    end 
end 

app/controllers/users_controller.rb:

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:index, :edit, :update, :destroy, 
            :following, :followers] 

    def following 
    @title = "Following" 
    @user = User.find(params[:id]) 
    @users = @user.following.paginate(page: params[:page]) 
    render 'show_follow' 
    end 
end 

rake routes:

Prefix Verb URI Pattern        Controller#Action 
password_resets_new GET /password_resets/new(.:format)   password_resets#new 
    password_resets_edit GET /password_resets/edit(.:format)   password_resets#edit 
     sessions_new GET /sessions/new(.:format)     sessions#new 
      users_new GET /users/new(.:format)     users#new 
       root GET /          static_pages#home 
       help GET /help(.:format)       static_pages#help 
       about GET /about(.:format)      static_pages#about 
      contact GET /contact(.:format)      static_pages#contact 
      signup GET /signup(.:format)      users#new 
       login GET /login(.:format)      sessions#new 
        POST /login(.:format)      sessions#create 
      logout DELETE /logout(.:format)      sessions#destroy 
    following_user GET /users/:id/following(.:format)   users#following 
    followers_user GET /users/:id/followers(.:format)   users#followers 
       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 
        GET /users(.:format)      users#index 
        POST /users(.:format)      users#create 
        GET /users/new(.:format)     users#new 
        GET /users/:id/edit(.:format)    users#edit 
        GET /users/:id(.:format)     users#show 
        PATCH /users/:id(.:format)     users#update 
        PUT /users/:id(.:format)     users#update 
        DELETE /users/:id(.:format)     users#destroy 
edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit 
    password_resets POST /password_resets(.:format)    password_resets#create 
new_password_reset GET /password_resets/new(.:format)   password_resets#new 
edit_password_reset GET /password_resets/:id/edit(.:format)  password_resets#edit 
    password_reset PATCH /password_resets/:id(.:format)   password_resets#update 
        PUT /password_resets/:id(.:format)   password_resets#update 
     microposts POST /microposts(.:format)     microposts#create 
      micropost DELETE /microposts/:id(.:format)    microposts#destroy 
     relationships POST /relationships(.:format)    relationships#create 
     relationship DELETE /relationships/:id(.:format)   relationships#destroy 

Ich bin nicht sicher, warum der Fehler die Route zeigt der Test versucht zu schlagen /users/762146111/following. 762146111 ist, wo die Benutzer-ID sein sollte, die ich annehmen sollte, 1. Ich habe versucht, rake db:migrate:reset gefolgt von rake db:seed tun, aber die ID bleibt gleich. Ich habe auch versucht, debugger in die Methode über der Behauptung hinzuzufügen, aber ich habe Probleme, sudo gem install ruby-debug zu installieren. byebug durchläuft auch nur die Tests ohne Haltepunkt.

Einsicht oder Ideen stark

geschätzt
+0

Eine wilde Ahnung - was würde passieren, wenn Sie 'following_user_path (@user)' zu 'following_user_path (id: @ user.id)'? Oder 'following_user_path (@ user.id)'? –

+0

@IleEftimov hmm gleiche Fehlermeldung für beide dieser – alisontague

+0

Ich wäre bereit, es zu testen, wenn Sie ein Repo mit dem Code bereitstellen. –

Antwort

1

Sie haben nicht die Strecke einrichten zu handhaben "Benutzer /: id/folgenden"

Sie müssen dies in Ihrem routes.rb

resources :users do 
    member do 
     get :following, :followers 
    end 
    end 

Schauen Sie sich Listing 14.15 im Tutorial an.

Die seltsame Zahl ist das, was in Test/Einrichtung/users.yml verwendet wurde

+0

Ich habe meine Frage bearbeitet, um jetzt Routen hinzuzufügen. Ich hatte die erwähnten Routen und stehe immer noch vor dem Problem. Die Rake-Routen sehen folgendermaßen aus: 'following_user GET /users/:id/following(.:format) users # following'. Also meine Routen sind bereits verschachtelt und definiert, aber die ID scheint einfach nicht zu einem Benutzer – alisontague

+0

Das ist nicht dein Problem. Wenn Sie nicht mit einem Benutzer übereinstimmen, erhalten Sie den Fehler "Datensatz nicht gefunden". Der Fehler "Keine Route stimmt überein ..." weist auf ein Routing-Problem hin. – SteveTurczyn

+0

Führen Sie den Befehl 'roke routes' aus dem Stammverzeichnis Ihrer Anwendung aus, und veröffentlichen Sie diese Ergebnisse. – SteveTurczyn

0

ich das gleiche problema hatte aber in Kapitel 10 mit den Tests. In meinem Fall war das Problem, dass ich das Tutorial begann und den Benutzer-Controller mit einer alten Version von Rails generierte. Die Rails-Version wurde aktualisiert, als ich durch das Tutorial ging, also gehörte der Benutzer-Controller zur alten Version.

Meine Lösung bestand darin, den Benutzer-Controller zu zerstören, erneut zu generieren und den gesamten Code, der gelöscht wurde, erneut zu schreiben. Jetzt funktioniert es perfekt.