我试图在请求规范中设置会话变量。
我尝试了以下方法来实现这个目标:
RSpec.describe 'Application Controller' do
context 'updating an application' do
before :each do
@app = create(:application, step: 'investigation')
end
it 'should update app status' do
Status.create(app_id: @app.id, name: Status.names[:start])
request.session[:app_id] = @app.id
patch "/applications/start",
params: s_params
expect(response).to redirect_to(offers_path)
end
end
end
我已经尝试用@request
替换request
,两者都得到了相同的输出。
NoMethodError:
undefined method `session' for nil:NilClass
那么我尝试仅将其设置为:
session[:app_id] = @app.id
这将产生以下结果:
NoMethodError:
undefined method `session' for nil:NilClass
并且可以像这样进行设置:
patch "/applications/start",
params: s_params,
session: {"app_id" => @app.id}
这将产生:
ArgumentError:
unknown keyword: session
我的版本:
╰>>> ruby -v
ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-darwin18]
╰>>> rails -v
Rails 5.2.1
╰>>> rspec -v
RSpec 3.8
- rspec-core 3.8.0
- rspec-expectations 3.8.1
- rspec-mocks 3.8.0
- rspec-rails 3.8.0
- rspec-support 3.8.0
看文档建议我们可以利用会话,但没有清楚的示例说明如何做到这一点。
ActionController::TestCase
或ActionDispatch::IntegrationTest
继承。看起来,在调用对象之后,您只能访问请求,但在进行调用之前,我需要设置会话。 - legendary_robcookies['key']
:https://github.com/rspec/rspec-rails/blob/master/features/controller_specs/Cookies.md - ldeld