Two tips:

1) You can tail the test log (tail -f log/test/log). This will show you which 
controller & action is actually being hit by your test -- it is likely that 
this action isn't getting hit.

2) Try the debugger!  Put "debugger" right after def registered_user, then make 
sure 'ruby-debug' or 'ruby-debug19' is in your Gemfile (hint: put it into a 
:test and :development group so that it doesn't deploy to production), and when 
you run spec be sure to use the -d flag.  If you can get it to drop into 
debugger on that line of code you know your app is getting to that action.

I don't suppose the if signed_in? is the problem? I don't see any place in your 
test where you are logging in the user.

Good luck!

Jason


On Feb 23, 2012, at 10:59 AM, Mohamad El-Husseini wrote:

> I'm following the new version of Rails Tutorial. Chapter 9, exercise 5 asks 
> to ensure that registered users can not access the new and create methods in 
> the users controller:
> 
> Signed-in users have no reason to access the new and create actions in the 
> Users controller. Arrange for such users to be redirected to the root url if 
> they do try to hit those pages.
> 
> To do this, I added a before filter to the users_controller.rb to check if a 
> user is signed in on new and create:
> 
>     before_filter :registered_user, only: [:new, :create]
>     def registered_user
>       redirect_to user_path(current_user) if signed_in?
>     end
> 
> The before filter uses the same method (signed_in?) that my authentication 
> system uses to check if the user is signed. In browser testing, the behavior 
> works as expected. I can't, however, get RSpec to play nice: The second test 
> that checks for a redirect fails:
> 
>       describe "visiting the sign up page" do
>         before { visit sign_up_path }
>         it { should_not have_selector('h1', text: 'Sign Up') }
>         it { should_not have_selector('title', text: full_title('Sign Up')) }
>       end
> 
>     # This fails
> 
>       describe "submitting to the create action" do
>         before { post users_path(user) }
>         specify { response.should redirect_to(user_path(user)) }
>       end
> 
> Giving me the following message:
> 
> 1) AuthenticationPages signin with valid information submitting to the create 
> action 
>      Failure/Error: specify { response.should redirect_to(user_path(user)) }
>        Expected response to be a <:redirect>, but was <200>
>      # ./spec/requests/authentication_pages_spec.rb:50:in `block (5 levels) 
> in <top (required)>'
> 
> 
> Any idea why this is happening?
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/rubyonrails-talk/-/J2Yuwpl_oMcJ.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/rubyonrails-talk?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to