Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails Rspec-未定义的方法'session';_Ruby On Rails_Ruby_Session_Rspec - Fatal编程技术网

Ruby on rails Rails Rspec-未定义的方法'session';

Ruby on rails Rails Rspec-未定义的方法'session';,ruby-on-rails,ruby,session,rspec,Ruby On Rails,Ruby,Session,Rspec,我正在测试我的会话控制器,但是我遇到了这个错误,登录功能可以正常工作,我在浏览器上测试了它,但是我刚刚开始在Rspec上测试,无法正常工作 Failure/Error: expect(response.session[:user_id]).to eq(@user_attr.id) NoMethodError: undefined method `session' for #<ActionController::TestResponse:0xd30df10> # ./spe

我正在测试我的会话控制器,但是我遇到了这个错误,登录功能可以正常工作,我在浏览器上测试了它,但是我刚刚开始在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)>'
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

session
是一个变量,在没有请求/响应上下文的情况下可用,如示例所示。如果要对其进行操作或检查其包含的值,只需执行以下操作:

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

非常感谢,;我花了很长时间才找到这个建议。但是,它适用于控制器规范,我有一个重定向到登录的请求规范,我无法将会话设置为在发出请求时指示用户已登录。
it "gives session" do
    session[:user_id] = nil
    post :create, user: @user_attr
    expect(session[:user_id]).to eq(@user_attr.id)
end