在查看了有类似错误消息的人的帖子后,我仍然不明白为什么我的RSpec测试不能通过。运行规范时,我收到以下错误消息:
失败:
1) UsersController在用户未登录时获取#显示重定向
登录的步骤
失败/错误:预期(响应)。重定向到(new\u user\u session\u path)
Expected response to be a <3XX: redirect>, but was a <200: OK>
Response body:
# ./spec/model/user_spec.rb:21:in `block (4 levels) in <top (required)>'
在0.25988秒内完成(加载文件需要5.02秒)5
示例,1故障
失败的示例:
rspec公司/规格/型号/用户\u规格rb:19#UsersController获取#显示
用户未登录重定向到登录“
这是我的user\u spec文件:
require 'rails_helper'
describe UsersController, type: :controller do
let(:user) { User.create!(email: 'test@example.com', password: '1234567890') }
describe 'GET #show' do
context 'when a user is logged in' do
before do
sign_in user
end
it 'loads correct user details' do
get :show, params: { id: user.id }
expect(assigns(:user)).to eq user
end
end
context 'when a user is not logged in' do
it 'redirects to login' do
get :show, params: { id: user.id }
expect(response).to redirect_to(new_user_session_path)
end
end
end
end
我的rails\u助手。rb:
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'devise'
RSpec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :controller
end
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
end
My users\u控制器:
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
before_action :authenticate_user!, except: [:show, :index]
load_and_authorize_resource
def index
@users = User.all
end
def show
end
def new
@user = User.new
end
def edit
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:first_name, :last_name)
end
end
和路线:
Rails.application.routes.draw do
devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }
resources :products do
resources :comments
end
resources :users
post 'simple_pages/thank_you'
get 'simple_pages/about'
get 'simple_pages/contact'
get 'simple_pages/thank_you'
get 'simple_pages/index'
root "simple_pages#landing_page"
resources :orders, only: [:index, :show, :create, :destroy]
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end