[rspec-users] ActiveRecord::RecordNotFound error Cucumber/Webrat

Andrei Erdoss erdoss at gmail.com
Wed Nov 26 12:17:41 EST 2008


Thank you, that worked.

I have a new issue. I tried finding a solution for this everywhere. Only
source is this article:
http://afreshcup.com/2008/10/09/authentication-in-cucumber-tests/

I am using Restful Authentication and I would like to login in Cucumber.
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 'erdoss at gmail.com'
     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?

Thank you


On Wed, Nov 26, 2008 at 4:20 PM, David Chelimsky <dchelimsky at gmail.com>wrote:

> On Wed, Nov 26, 2008 at 5:04 AM, Andrei Erdoss <erdoss at gmail.com> wrote:
> > Hello,
> >
> > I am bit new to Cucumber and Webrat and I have one issue that I can't
> seem
> > to fix on my own. I would appreciate your help.
> >
> > I have a controller called places and a model called Place. I use the
> > acts_as_tree plugin in order for a place to have more places within it.
> Ex.
> > Georgia would have Cobb County, Cobb County would have Smyra City.
> >
> > This is how my controller looks for adding  a new place:
> >
> > # loading the parent place
> > before_filter :load_parent_place, :only => [:new, :create]
> > def load_parent_place
> >     @parent_place = Place.find(params[:parent_id])
> >   end
> >
> >  # 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
> >
> >
> > I have created the cucumber feature also, but it errors out:
> >
> >  Scenario: Register new place
> >     Given I am on the new place page with parent place "Georgia"
> >     When I fill in "Name" with "Atlanta"
> >     And I press "Create"
> >     Then I should see "Atlanta"
> >
> > For the first line starting with "Given", I tried to put this step, but
> it
> > errors out with Couldn't find Place with ID=1
> (ActiveRecord::RecordNotFound)
> >
> > Given /I am on the new place page with parent place "(.*)"/ do |name|
> >   visits "/places/new?parent_id=1"
> >   Place.create! :name => name, :parent_id => 1
> > end
> >
> > What am I doing wrong or how should I proceed with writing these steps
> for
> > this action?
>
> Try this:
>
> Given /I am on the new place page with parent place "(.*)"/ do |name|
>   parent = Place.create! :name => name
>  visits "/places/new?parent_id=#{parent.id}"
> end
>
>
> >
> > Thank you,
> >
> > --
> > Andrei Erdoss
> >
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



-- 
Andrei Erdoss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081126/d250fc80/attachment-0001.html>


More information about the rspec-users mailing list