Установите переменную сеанса в спецификации запроса Rspec - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь установить переменную сеанса в спецификации запроса.

Я попытался сделать следующее:

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

Просмотр документации itпредлагает нам использовать сессии, но не дает четкого примера того, как мы это сделаем.

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете сделать следующее:

- RSpec.describe 'Application Controller' do
+ RSpec.describe 'Application Controller', type: :request do

А затем просто:

session[:app_id] = @app.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...