Nano Hash - криптовалюты, майнинг, программирование

Rspec & Capybara: неинициализированная константа 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)>'

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

spec / features / 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

spec / support / 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>

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

Проблема с Rspec email_spec


Ответы:


1

Вам нужен resources :sessions, вам не хватает "s".

Редактировать :

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

<%= link_to "Log Out",session_path(pass the current signed in user here) , method: :delete %>
23.03.2015
  • Спасибо за ответ. Я все еще получаю эту ошибку Failure/Error: login(@writer) ActionView::Template::Error: No route matches {:action=>"show", :controller=>"sessions"} missing required keys: [:id]. Что меня смущает, так это то, что я не думал, что мне нужно действие «показать», поэтому предположил, что автор сохранил маршрут «сеанс» как единичный. 23.03.2015
  • @Shroy вы определили корень? Вам нужно root "sessions#new в вашем routes.rb 24.03.2015
  • Я определяю корень posts#index. Это блог, и я пытаюсь создать систему аутентификации с администраторами, writers и visitors, которые могут только комментировать. На корневой странице руководства отображаются все сообщения. 24.03.2015
  • @Shroy, пожалуйста, добавьте к вопросу новую полную ошибку. 24.03.2015
  • Похоже, теперь логин работает! Теперь возникла проблема с маршрутом выхода. 2) User Management User log out Failure/Error: logout(@writer) ActionController::RoutingError: No route matches [DELETE] "/session" 24.03.2015
  • Определенно! Отредактировал мой пост, чтобы включить его. 24.03.2015
  • @Shroy, вам нужно будет показать свои рейк-маршруты и свою индексную страницу, похоже, проблема в том, что у вас нет маршрута или вы используете его неправильно. 24.03.2015
  • Я попытался добавить session_path(current_user), который является методом, в мой файл profiles_controller.rb. Следуя руководству, это будет его office_controller.rb. Но теперь я получаю сообщение об ошибке Failure/Error: activate(@writer) ActionView::Template::Error: undefined method 'current_user' for #<SessionsController:0x007fd2029c8d68> Судя по комментариям к руководству, для Rails 4 нужно было сделать только пару изменений. Я не понимаю, почему у меня так много не работает. : / 24.03.2015
  • @Shroy означает, что мы исправили предыдущие ошибки. теперь вы можете задать новый вопрос о новой ошибке. 24.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..