David, Thank you for your great insight. You're assumptions were correct and the user wasn't getting logged in, because I didn't add all the necessary paramenters for the user to be able to log in. I am checking if the user is being created and also if after login, there is a message posted, such as Logged in. I posted that message in Application layout.
This is my working login step for anybody that might have a use for this later on. Given /I am logged in as a user/ do @current_user = User.create!( :name => 'quentin', :email => '[EMAIL PROTECTED]', :login => 'loginz', :password => 'monkey', :password_confirmation => 'monkey', :activated_at => '2008-11-22 12:13:59', :activation_code => nil, :salt => '356a192b7913b04c54574d18c28d46e6395428ab', :crypted_password => 'df42adbd0b4f7d31af495bcd170d4496686aecb1', :created_at => '2008-11-22 12:13:59') visits "/login" fills_in("login", :with => "quentin") fills_in("password", :with => "monkey") clicks_button("Log in") User.find_by_name("quentin").should_not be_nil response.body.should =~ /Logged/m end On Thu, Nov 27, 2008 at 1:30 PM, David Chelimsky <[EMAIL PROTECTED]>wrote: > On Wed, Nov 26, 2008 at 11:58 PM, Andrei Erdoss <[EMAIL PROTECTED]> wrote: > > Hello, > > > > I am using Restful Authentication and I would like to login in Cucumber. > I > > am having trouble keeping the user logged in. I tried finding a solution > for > > this everywhere. Only source is this article: > > http://afreshcup.com/2008/10/09/authentication-in-cucumber-tests/ > > > > This is how my feature looks like: > > > > Scenario: Register new place > > Given I am logged in as a user > > And I am on the new place page with parent place "Georgia" > > When I fill in "Name" with "Atlanta" > > And I press "Create" > > And I should see "Atlanta" > > > > This is the step: > > > > Given /I am logged in as a user/ do > > @current_user = Factory.define :user do |u| > > u.name 'the user' > > u.email '[EMAIL PROTECTED]' > > u.login 'the_login' > > u.password 'password' > > u.password_confirmation 'password' > > end > > visits "/login" > > fills_in("login", :with => "the_login") > > fills_in("password", :with => "password") > > clicks_button("Log in") > > end > > > > # places controller > > > > before_filter :login_required, :only => [:create] > > > > # GET /places/new > > def new > > @place = @parent_place.children.create > > > > respond_to do |format| > > format.html # new.html.erb > > end > > end > > > > # POST /places > > def create > > @place = @parent_place.children.create(params[:place]) > > > > respond_to do |format| > > if @place.save > > flash[:notice] = 'Place was successfully created.' > > format.html { redirect_to(@place) } > > else > > format.html { render :action => "new" } > > end > > end > > end > > > > The "Given I am logged in as a user" step passes, along with all the > steps, > > except the last one (And I should see "Atlanta"). The problem is that the > > login page is shown and not the show page with the new place created. > > > > What do I have to set in Cucumber so that it acts as if the user is > logged > > in? In know that in Rspec :login_required should return true. What's the > > equivalent of that in Cucumber? > > I'm not sure what you mean by "in RSpec :login_required should return > true," but that might be a subject for a different thread. > > When using Cucumber with Rails you're dealing with a wrapped rails > integration test. Because integration tests (in rails) are designed to > support multiple user sessions within a single test (scenario in the > case of Cucumber), you don't have any direct access to the internals > of any controllers. > > With that, the problem you are having seems to be that the login step > is not actually working. Just because the step turns green doesn't > mean the User is actually logged in. There are no expectations being > set that would fail, and it's possible that the Factory.define method > doesn't raise errors if it doesn't actually create the User (I'm > guessing you're using Factory Girl, but I have no experience with it > myself yet). > > To debug this, I'd add an expectation to the Given step about > something on the page. When someone logs in, does the page say > something like "Welcome, the user"? If so, you can expect that text to > be there. > > Also, check to make sure that the "the user" User is actually in the > database. Something like User.find_by_name("the user").should_not > be_nil. > > HTH, > David > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > -- Andrei Erdoss
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users