Ruby on rails Rails Rspec-未定义的方法'session';
我正在测试我的会话控制器,但是我遇到了这个错误,登录功能可以正常工作,我在浏览器上测试了它,但是我刚刚开始在Rspec上测试,无法正常工作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
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