Forum: Ruby on Rails Functional Testing Nested Resources

Posted by AmateurCoder (Guest)
on 2013-02-04 16:05
(Received via mailing list)
I understand that in order to functional test a nested resource, you 
need
to pass the id of the parent resource.  I am having a problem testing 
the
'edit' action on the nested resource.

Here is the failing test.

  test "should get edit" do
    get :edit, id: capability_types(:one).id, capability_category_id:
capability_categories(:one).id
    assert_response :success
  end

id: capability_types(:one).id is passing the id from the 
capability_types
fixture.  I am setting the capability_category_id from the
capability_categories fixture.

I am getting this error message.

Couldn't find CapabilityType with id=980190962 [WHERE
"capability_types"."capability_category_id" = $1]
Exception `ActiveRecord::RecordNotFound'

#fixtures
capability_types.yml
one:
  name: MyString
  capability_category_id: 1

two:
  name: MyString
  capability_category_id: 1

capability_categories.yml
one:
  name: MyString

two:
  name: MyString

'edit' action in the controller
    def edit
      @capability_type =
@capability_category.capability_types.find(params[:id])
    end

I am using Rails 4 and have a before_action defined to set_the
capability_category.

  before_action :set_capability_category

  def set_capability_category
    @capability_category =
CapabilityCategory.find(params[:capability_category_id])
  end

*I can see anything that I've done that should not work.  Any ideas? 
would
be greatly appreciated.*
Posted by AmateurCoder (Guest)
on 2013-02-04 18:04
(Received via mailing list)
I managed to get this to work. I used the fixture name instead of the 
rigid
foreign key id in the capability_test.yml fixture.

Thus,

#fixtures
capability_types.yml
one:
  name: MyString
  capability_category: one

two:
  name: MyString
  capability_category: one
Posted by Robert Walker (robert4723)
on 2013-02-06 23:28
AmateurCoder wrote in post #1095172:
> I managed to get this to work. I used the fixture name instead of the
> rigid
> foreign key id in the capability_test.yml fixture.
>
> Thus,
>
> #fixtures
> capability_types.yml
> one:
>   name: MyString
>   capability_category: one
>
> two:
>   name: MyString
>   capability_category: one

Glad you got it going, but I just wanted to recommend you take a serious 
look at move away from fixtures to factories instead.

https://github.com/thoughtbot/factory_girl_rails
Posted by Johnneylee Rollins (Guest)
on 2013-02-07 00:34
(Received via mailing list)
And I suggest you do your best to minimize the use of 
factories/fixtures.
In functional tests, you'll want to limit your use of factories or 
fixtures
only to the setup step for your functional tests.

This way you're only putting your application data in a specific state
before you exercise the system.

I'm assuming these are also end-to-end tests as well.

~Johnneylee
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.