# Functional testing and session\[:session\_id\]

**URL:** <https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370>\
**Category:** Rails\
**Created:** [July 13, 2007, 8:41pm UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370 "2007-07-13T20:41:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![soroe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@soroe](https://www.ruby-forum.com/u/soroe)\
**Post date:** [July 13, 2007, 8:41pm UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370/1 "2007-07-13T20:41:18Z")

</div>

Hey Guys,

Does Rails set the session[:session\_id] field in functional testing?  
I’ve been getting an empty string… which is causing the url\_for  
function call in my view to blow up. It would be really nice to avoid  
the following ugly workaround…

\<%= if session.session\_id != ‘’  
link\_to ‘Sign Out’, session\_url(:id =\> session.session\_id), :method =\>  
:delete end %\>

Sonny.

---

<div class="post-metadata">

**Author:** ![soroe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@soroe](https://www.ruby-forum.com/u/soroe)\
**Post date:** [July 13, 2007, 10:58pm UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370/2 "2007-07-13T22:58:50Z")

</div>

You can use @request.session[:session\_id] = user.id in the setup  
method to artificially login in users for the functional tests.

On Jul 13, 2:41 pm, Sonny C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![soroe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@soroe](https://www.ruby-forum.com/u/soroe)\
**Post date:** [July 13, 2007, 11:53pm UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370/3 "2007-07-13T23:53:41Z")

</div>

danlunde wrote:

> You can use @request.session[:session\_id] = user.id in the setup  
> method to artificially login in users for the functional tests.
> 
> On Jul 13, 2:41 pm, Sonny C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

I’ve tried that but and gotten the following error message:

ActionView::TemplateError: session\_url failed to generate from  
{:controller=\>“sessions”, :id=\>“”, :action=\>“show”}, expected:  
{:controller=\>“sessions”, :action=\>“show”}, diff: {:id=\>“”}  
On line #21 of app/views/layouts/application.rhtml

18: Signed in as \<%= link\_to user.name, user\_url(:id =\> user)%\>  
19:   
  
20: \<%= link\_to ‘Settings’, edit\_user\_url(:id =\> current\_user)%\>  
21: \<%= link\_to ‘Sign Out’, session\_url(:id =\> session.session\_id),  
:method =\> :delete %\>

…

---

<div class="post-metadata">

**Author:** ![soroe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@soroe](https://www.ruby-forum.com/u/soroe)\
**Post date:** [July 14, 2007, 12:18am UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370/4 "2007-07-14T00:18:57Z")

</div>

Maybe line 21 should be

session\_url(:id =\> session[:session\_id], :method =\> :delete))  
or  
session\_url(:id =\> current\_user, :method =\> :delete)

On Jul 13, 5:53 pm, Sonny C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![soroe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f9ae1b/32.png) [@soroe](https://www.ruby-forum.com/u/soroe)\
**Post date:** [July 14, 2007, 1:06am UTC](https://www.ruby-forum.com/t/functional-testing-and-session-session-id/109370/5 "2007-07-14T01:06:05Z")

</div>

danlunde wrote:

> Maybe line 21 should be
> 
> session\_url(:id =\> session[:session\_id], :method =\> :delete))  
> or  
> session\_url(:id =\> current\_user, :method =\> :delete)
> 
> On Jul 13, 5:53 pm, Sonny C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

Thanks for the suggestions, but alas,

1. session[:session\_id] is nil in the rendered view

2. :id=\>current\_user will work… but if someone was malicious they  
could spam my site with session\_url(:id =\> random\_number, :method =\>  
:delete) which would result in my users being logged out  
unexpectedly…

Sonny.
