【问题标题】:Rails Rspec - undefined method `session'Rails Rspec - 未定义的方法“会话”
【发布时间】:2015-10-19 02:10:04
【问题描述】:

我正在测试我的会话控制器,但我收到此错误,登录功能有效,我在浏览器上对其进行了测试,但我是在 Rspec 上测试的新手,无法让它工作

 Failure/Error: expect(response.session[:user_id]).to eq(@user_attr.id)
 NoMethodError:
   undefined method `session' for #<ActionController::TestResponse:0xd30df10>
 # ./spec/controllers/sessions_controller_spec.rb:20:in `block (3 levels) in <top (required)>'

这是我的控制器的代码:

def new
    @user = User.new
end

def create
    @user = User.find_by(username: params[:user][:username])
    if @user && @user.authenticate(params[:user][:password])
        session[:user_id] = @user.id
        redirect_to root_path
    else
        render :new
    end
end

Rspec 代码:

require 'rails_helper'

RSpec.describe SessionsController, type: :controller do
describe "get Login page" do
    it "returns http status" do
        get :new
        expect(response).to have_http_status(:success)
    end
end

describe "session" do
    before(:each) do
        @user = FactoryGirl.create(:user)
        @user_attr = FactoryGirl.attributes_for(:user) 
    end

    it "gives session" do
        request.session[:user_id] = nil
        post :create, user: @user_attr
        expect(response.session[:user_id]).to eq(@user_attr.id)
    end
end
end

【问题讨论】:

    标签: ruby-on-rails ruby session rspec


    【解决方案1】:

    session 是一个没有请求/响应上下文的变量,如您的示例所示。如果您想操作它或检查它包含的值,您可以简单地执行以下操作:

    it "gives session" do
        session[:user_id] = nil
        post :create, user: @user_attr
        expect(session[:user_id]).to eq(@user_attr.id)
    end
    

    【讨论】:

    • 非常感谢;花了很长时间才找到这个建议。但是,它适用于控制器规范,并且我有一个请求规范正在重定向以登录,并且我无法设置会话以指示用户在发出请求时已登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2017-12-09
    • 2015-05-27
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多