【发布时间】:2019-04-26 03:12:57
【问题描述】:
我正在尝试在请求规范中设置会话变量。
我已经尝试了以下方法来做到这一点:
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
看看documentation,它表明我们可以利用会话,但没有给出一个明确的例子来说明我们将如何做到这一点。
【问题讨论】:
-
是的,我尝试了他们在那篇帖子中提出的每一个建议。在我的测试中,我没有从
ActionController::TestCase或ActionDispatch::IntegrationTest继承。看起来您只有在调用对象后才能访问请求,但我需要在调用之前设置会话。 -
对,对不起。在文档上找不到任何可以直接使用会话的内容,但也许这会有所帮助:看来您可以使用
cookies['key']:github.com/rspec/rspec-rails/blob/master/features/…
标签: ruby-on-rails session rspec