2015-03-23 4 views
0

Я следую по процессу аутентификации данного руководства заключается - в настоящее время в разделе «Проверка подлинности пользователя»:Rspec & Капибара: неинициализированная постоянная SessionController

http://larsgebhardt.de/user-authentication-with-ruby-on-rails-rspec-and-capybara/

Я получил отказ теста последователя:

1) User Management User log in 
    Failure/Error: login(@writer) 
    ActionController::RoutingError: 
     uninitialized constant SessionController 
    # ./spec/support/user_helper.rb:6:in `login' 
    # ./spec/features/users_spec.rb:27:in `block (2 levels) in <top (required)>' 

Вот конкретный тестовый и вспомогательный файл, упомянутый в сообщении об ошибке, вместе с другими файлами.

спецификации/особенности/users_spec.rb

require 'spec_helper' 

    background do 
     @writer = create(:user, :writer) 
    end 

    .... 

    scenario 'User log in' do 
     activate(@writer) 
     login(@writer) 
     expect(page).to have_content "Successfully logged in." 
    end 

спецификации/поддержка/user_helper.rb

module UserHelper 


    def login(a) 
    visit root_path 
    click_link 'Log In' 
    fill_in 'session[email]', with: a.email 
    fill_in 'session[password]', with: a.password 
    click_button 'Log In' 
    end 

    def logout(a) 
    visit root_path 
    click_link 'Log Out' 
    end 

    def activate(a) 
    visit activate_path(:code => a.activation_code) 
    end 

end 

routes.rb

resources :session 

sessions_controller.rb

class SessionsController < ApplicationController 


    def new 
    end 

    def create 
    user = User.find_by_email(params[:session][:email]).try(:authenticate, params[:session][:password]) 
    if user 
     if user.is_active? 
      session[:user_id] = user.id 
      redirect_to (session[:target_url] || root_path) 
       flash[:notice] = "Successfully logged in." 
      else 
       redirect_to new_session_path 
       flash[:error] = "Account inactive. Please activate your account." 
      end 
     else 
      redirect_to new_session_path 
      flash[:error] = "Invalid email or password." 
     end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_path 
    flash[:notice] = "Successfully logged out." 
    end 

end 

new.html.erb

<h1>Log In</h1> 

<%= form_for :session, url: sessions_path do |f| %> 

    <div> 
     <%= f.label :email %> 
     <%= f.text_field :email %> 
    </div> 

    <div> 
     <%= f.label :password %> 
     <%= f.password_field :password %> 
    </div> 

    <div> 
     <%= f.submit 'Log In' %> 
    </div> 

<% end %> 

рейк маршруты

Prefix Verb URI Pattern         Controller#Action 
    profiles_show GET /profiles/show(.:format)     profiles#show 
    sessions_new GET /sessions/new(.:format)      sessions#new 
     users_new GET /users/new(.:format)      users#new 
      root GET /           sessions#new 
    post_comments GET /posts/:post_id/comments(.:format)   comments#index 
        POST /posts/:post_id/comments(.:format)   comments#create 
new_post_comment GET /posts/:post_id/comments/new(.:format)  comments#new 
edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) comments#edit 
    post_comment GET /posts/:post_id/comments/:id(.:format)  comments#show 
        PATCH /posts/:post_id/comments/:id(.:format)  comments#update 
        PUT /posts/:post_id/comments/:id(.:format)  comments#update 
        DELETE /posts/:post_id/comments/:id(.:format)  comments#destroy 
      posts GET /posts(.:format)       posts#index 
        POST /posts(.:format)       posts#create 
     new_post GET /posts/new(.:format)      posts#new 
     edit_post GET /posts/:id/edit(.:format)     posts#edit 
      post GET /posts/:id(.:format)      posts#show 
        PATCH /posts/:id(.:format)      posts#update 
        PUT /posts/:id(.:format)      posts#update 
        DELETE /posts/:id(.:format)      posts#destroy 
     sessions GET /sessions(.:format)       sessions#index 
        POST /sessions(.:format)       sessions#create 
     new_session GET /sessions/new(.:format)      sessions#new 
    edit_session GET /sessions/:id/edit(.:format)    sessions#edit 
      session GET /sessions/:id(.:format)      sessions#show 
        PATCH /sessions/:id(.:format)      sessions#update 
        PUT /sessions/:id(.:format)      sessions#update 
        DELETE /sessions/:id(.:format)      sessions#destroy 
      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 
    profile_index GET /profile(.:format)       profile#index 
        POST /profile(.:format)       profile#create 
     new_profile GET /profile/new(.:format)      profile#new 
    edit_profile GET /profile/:id/edit(.:format)     profile#edit 
      profile GET /profile/:id(.:format)      profile#show 
        PATCH /profile/:id(.:format)      profile#update 
        PUT /profile/:id(.:format)      profile#update 
        DELETE /profile/:id(.:format)      profile#destroy 
     activate GET /activate/:code(.:format)     users#activate 

_header.html.erb

<a href="#">About</a> 
<a href="#">Services</a> 
<a href="#"><%= link_to "Sign Up", new_user_path %></a> 
<a href="#"><%= link_to "Log In", new_session_path %></a> 
<a href="#"><%= link_to "Log Out", "/session", method: :delete %></a> 

я ранее имел проблемы с настройкой файла Helper пользователя, который был решен, но упаковывают это становится актуальным, вы можете увидеть ответ и состояние файла конфигурации здесь:

Rspec email_spec issue

ответ

1

Вам нужно resources :sessions, вам отсутствуют 's'.

Edit:

Вы используете маршрут удаления неправильно, вы должны сказать

<%= link_to "Log Out",session_path(pass the current signed in user here) , method: :delete %> 
+0

Спасибо за ответ. Я все еще получаю эту ошибку «Ошибка/Ошибка: login (@writer) ActionView :: Template :: Ошибка: Нет совпадений маршрутов {: action =>" show ",: controller =>" sessions "} отсутствуют необходимые ключи : [: id] '. Меня смущает то, что я не думал, что мне нужно действие «показать», поэтому предполагается, что автор сохранил маршрут «сеанс» как единичный. – shroy

+0

@Shroy вы определили корень? Вам нужны «корневые» сеансы # new' »в ваших маршрутах. Rb –

+0

. Я определяю, что мой root является' posts # index'. Это блог, и я пытаюсь создать систему проверки подлинности, в которой есть «администратор», «писатели» и «посетители», которые могут только комментировать. Страница пользователя root отображает все сообщения. – shroy

Смежные вопросы