Is flash[] value kept through action to action in integration tests?

21 views
Skip to first unread message

Wins Lin

unread,
Jun 4, 2013, 6:12:11 PM6/4/13
to rubyonra...@googlegroups.com
I have an integration test that sets a flash[] value in action before
redirect and reads it in the next action (the one that previous action
redirects to):

test("some integration test") do
get("/one")
assert_equal(true, flash[:foo]) ## is set to true in this action
assert_response(:redirect)

follow_redirect!

assert_equal(true, flash[:foo]) ## has to be true in next action
end

So flash[:foo] has to be "true" in the second action. Because it is set
in the first one. But my test throws an error:

1) Failure:
<true> expected but was <nil>.

My question is, are flash values kept in integration test? Does it have
to be "true" here or the above behavior is correct?

--
Posted via http://www.ruby-forum.com/.

Robert Walker

unread,
Jun 5, 2013, 9:40:08 AM6/5/13
to rubyonra...@googlegroups.com
Wins Lin wrote in post #1111366:
> My question is, are flash values kept in integration test? Does it have
> to be "true" here or the above behavior is correct?

The Rails guide has a clear explanation of the flash:

http://guides.rubyonrails.org/action_controller_overview.html#the-flash

Yes, the flash message is available IN the following request, but not
after it. My bet is that your assertion is happening after that next
action has completed.

Take a look at the example in Section 5.2 in this guide:

http://guides.rubyonrails.org/testing.html#integration-testing

post_via_redirect "/login", :username => users(:avs).username,
:password => users(:avs).password
assert_equal '/welcome', path
assert_equal 'Welcome avs!', flash[:notice]

Notice there is no follow_redirect! before checking the flash. Your
flash is getting destroyed before you can assert it.

Otavio Nestares

unread,
Jun 5, 2013, 10:06:11 AM6/5/13
to rubyonra...@googlegroups.com
Use flash.now[:notice] !!

Best
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/785f0fe32fdfe9f0e31f472eeada26ea%40ruby-forum.com?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Robert Walker

unread,
Jun 5, 2013, 10:28:54 AM6/5/13
to rubyonra...@googlegroups.com
Otavio Nestares wrote in post #1111439:
> Use flash.now[:notice] !!

Wouldn't that just make matters worse? flash.now makes the flash
available in the current request. It does not make it persists across
requests. Use flash.now when you want render the template directly
without a new request. That's not the case here.
Reply all
Reply to author
Forward
0 new messages