[rspec-users] cucumber is_admin? testing
David Chelimsky
dchelimsky at gmail.com
Mon Nov 28 11:10:01 EST 2011
On Mon, Nov 28, 2011 at 9:38 AM, Alex Whiteland <lists at ruby-forum.com> wrote:
> wtf?
>
> maybe I post an initiate letter here, and then find a way to write you?
>
>> Started here
> Hi!
>
> I have trite signin system, like this:
>
>> ApplicationController:
> include SessionsHelper
>
> private
>
> helper_method :current_user
>
> def current_user
> @current_user ||= User.find(session[:user_id]) if session[:user_id]
> end
>
>
>> SessionsHelper:
> def is_admin?
> @current_user && @current_user.id == 1
> end
>
>
>> features/support/env.rb:
> World(SessionsHelper)
>
> So, if I test
>> is_admin?.should be_true
>
> it returns:
>
> expected nil to be true (RSpec::Expectations::ExpectationNotMetError)
> ./features/step_definitions/users/add_user.rb:23:in `/^I should
> signin$/'
> features/users/add_user.feature:13:in `And I should signin'
>
> But I signed in! Why? What's the way to test authentication system from
> scratch?
>
>> that is added to cucumber's world does not have access to your
>> application
>> controller's @current_user variable.
>
> So, I understand this. But how I can avoid this defect?
It is not a defect. It's how cukes work. They wrap Rails integration
tests, which don't give you direct access to controllers or sessions.
Your options are:
1. actually log in (i.e. create a user, go to the login screen and log
in). You can wrap this in a single step definition like "Given I am
logged in as 'admin'", but you still have to go through the app within
the step definition.
2. This only works for in-memory scenarios (i.e. it doesn't work
in-browser when the app is running in a separate process) - you _can_
stub the controller using any_instance:
FooController.any_instance.stub(:current_user).and_return(user)
HTH,
David
>
> If I paste def is_admin? into application_controller near current_user
> method, I wouldn't can World(ApplicationController). If I copy
> current_user code to sessions_helper, then session[:user_id] wouldn't
> work.
>
> Regards, Alex Whiteland
>> end
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
More information about the rspec-users
mailing list