I’m trying to fix my functional tests for a nested resource. My config/routes.rb file looks like this:
Shop360::Application.routes.draw do
resources :libraries do
resources :library_imports
end
end
Nesting the library_imports resources breaks generated tests like this one:
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:library_imports)
end
because nesting changes all the URLs.
I’ve seen advice in several places to fix this by adding a library_id parameter like so:
test "should get index" do
get :index, :library_id => 1
assert_response :success
assert_not_nil assigns(:library_imports)
end
(second line changed)
So to get this to work, I have to explicitly specify a library_id in my library_import fixture? It’s been possible since Rails 2.0 to define associations in the fixture data without resorting to these explicit key definitions. Am I now being forced back into this rat’s nest because I’m nesting resources?
Is there not a better way to get my test to pass?
OK, this wasn’t as complicated as I thought. Let’s start with the fixtures:
libraries.yml
library_imports.yml
I create associations in this fixture data the proper way (i.e. no explicit keys).
Now, recall the failing test (in library_imports_controller_test.rb):
At the top of this file is the setup callback which looks like this:
So I can refer to @library_import (and specifically its library_id field) in my test. I change it like so:
And my test goes from red to green.