Set a session var in Rspec Request spec





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







3















I am trying to set a session variable in a request spec.



I have tried the following things to do this:



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


I have tried substituting request with @request both result in the same output.



NoMethodError:
undefined method `session' for nil:NilClass


then I have tried just setting as:



session[:app_id] = @app.id


which will yield:



NoMethodError:
undefined method `session' for nil:NilClass


and also setting it like this:



patch "/applications/start",
params: s_params,
session: {"app_id" => @app.id}


which will yield:



 ArgumentError:
unknown keyword: session


My versions:



╰>>> 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


Looking at the documentation it suggests we could leverage the sessions but does not give a clear example of how we would do this.










share|improve this question























  • Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

    – ldeld
    Nov 23 '18 at 14:39











  • Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

    – TheLegend
    Nov 23 '18 at 14:43











  • Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

    – ldeld
    Nov 23 '18 at 15:10


















3















I am trying to set a session variable in a request spec.



I have tried the following things to do this:



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


I have tried substituting request with @request both result in the same output.



NoMethodError:
undefined method `session' for nil:NilClass


then I have tried just setting as:



session[:app_id] = @app.id


which will yield:



NoMethodError:
undefined method `session' for nil:NilClass


and also setting it like this:



patch "/applications/start",
params: s_params,
session: {"app_id" => @app.id}


which will yield:



 ArgumentError:
unknown keyword: session


My versions:



╰>>> 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


Looking at the documentation it suggests we could leverage the sessions but does not give a clear example of how we would do this.










share|improve this question























  • Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

    – ldeld
    Nov 23 '18 at 14:39











  • Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

    – TheLegend
    Nov 23 '18 at 14:43











  • Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

    – ldeld
    Nov 23 '18 at 15:10














3












3








3








I am trying to set a session variable in a request spec.



I have tried the following things to do this:



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


I have tried substituting request with @request both result in the same output.



NoMethodError:
undefined method `session' for nil:NilClass


then I have tried just setting as:



session[:app_id] = @app.id


which will yield:



NoMethodError:
undefined method `session' for nil:NilClass


and also setting it like this:



patch "/applications/start",
params: s_params,
session: {"app_id" => @app.id}


which will yield:



 ArgumentError:
unknown keyword: session


My versions:



╰>>> 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


Looking at the documentation it suggests we could leverage the sessions but does not give a clear example of how we would do this.










share|improve this question














I am trying to set a session variable in a request spec.



I have tried the following things to do this:



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


I have tried substituting request with @request both result in the same output.



NoMethodError:
undefined method `session' for nil:NilClass


then I have tried just setting as:



session[:app_id] = @app.id


which will yield:



NoMethodError:
undefined method `session' for nil:NilClass


and also setting it like this:



patch "/applications/start",
params: s_params,
session: {"app_id" => @app.id}


which will yield:



 ArgumentError:
unknown keyword: session


My versions:



╰>>> 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


Looking at the documentation it suggests we could leverage the sessions but does not give a clear example of how we would do this.







ruby-on-rails session rspec






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 23 '18 at 13:43









TheLegendTheLegend

4,62494575




4,62494575













  • Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

    – ldeld
    Nov 23 '18 at 14:39











  • Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

    – TheLegend
    Nov 23 '18 at 14:43











  • Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

    – ldeld
    Nov 23 '18 at 15:10



















  • Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

    – ldeld
    Nov 23 '18 at 14:39











  • Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

    – TheLegend
    Nov 23 '18 at 14:43











  • Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

    – ldeld
    Nov 23 '18 at 15:10

















Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

– ldeld
Nov 23 '18 at 14:39





Have you checked stackoverflow.com/questions/22451969/rspec-set-session-object ?

– ldeld
Nov 23 '18 at 14:39













Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

– TheLegend
Nov 23 '18 at 14:43





Yeah, I tried every suggestion they had in that post. I am not inheriting from ActionController::TestCase or ActionDispatch::IntegrationTest in my test. It also looks like you only have access to the request after making a call to the object, but I need the session to be set before it makes the call.

– TheLegend
Nov 23 '18 at 14:43













Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

– ldeld
Nov 23 '18 at 15:10





Right, sorry. Didn't find anything on the docs to use session directly, but maybe this can help: it seems you can use cookies['key'] : github.com/rspec/rspec-rails/blob/master/features/…

– ldeld
Nov 23 '18 at 15:10












1 Answer
1






active

oldest

votes


















0














You could do the following:



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


And then just:



session[:app_id] = @app.id





share|improve this answer
























  • This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

    – TooMuchPete
    Mar 23 at 20:48












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447837%2fset-a-session-var-in-rspec-request-spec%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














You could do the following:



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


And then just:



session[:app_id] = @app.id





share|improve this answer
























  • This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

    – TooMuchPete
    Mar 23 at 20:48
















0














You could do the following:



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


And then just:



session[:app_id] = @app.id





share|improve this answer
























  • This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

    – TooMuchPete
    Mar 23 at 20:48














0












0








0







You could do the following:



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


And then just:



session[:app_id] = @app.id





share|improve this answer













You could do the following:



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


And then just:



session[:app_id] = @app.id






share|improve this answer












share|improve this answer



share|improve this answer










answered Feb 25 at 12:19









Paweł GościckiPaweł Gościcki

5,48954668




5,48954668













  • This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

    – TooMuchPete
    Mar 23 at 20:48



















  • This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

    – TooMuchPete
    Mar 23 at 20:48

















This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

– TooMuchPete
Mar 23 at 20:48





This doesn't work. Inside a before block it returns an an unknown method error. Just inside a context block you get "undefined local variable or method".

– TooMuchPete
Mar 23 at 20:48




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447837%2fset-a-session-var-in-rspec-request-spec%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()