So I have an controller method that responds to multiple formats, like so.
1 2 3 4 5 6 |
def index respond_to do |format| format.html format.pdf end end |
Simple enough. So what do the tests look like?
1 2 3 4 5 6 7 8 9 |
def test_default_index get :index assert_response :success end def test_pdf_index get :index, :format => :pdf assert_response :success end |
Again, nothing fancy. Let’s run the test and …
1) Failure:
test_pdf_index(FoosControllerTest)
[stacktrace omitted for brevity]
Expected response to be a <:success>, but was <406>
2 tests, 2 assertions, 1 failures, 0 errors
Ruh-roh. How could such a simple test fail, and what’s a 406 response? Well, it’s the numeric code for a Not Acceptable HTTP response, so it looks like the HTTP request is borked. Perhaps the log file will reveal something, and indeed it does.
Processing FoosController#index to pdf (for 0.0.0.0 at 2009-03-21 22:57:10) [GET]
Parameters: {"format"=>:pdf, "action"=>"index", "controller"=>"foos"}
Looks like we can’t use a symbol for the format in the test. Sure enough, a quick change to the failing test,
1 2 3 4 |
def test_pdf_index get :index, :format => 'pdf' assert_response :success end |
and the results are as expected.
2 tests, 2 assertions, 0 failures, 0 errors
Update: Looks like the code formatting is fubar.
Update II: The code formatting is now fixed. See the explanation if you’re interested in the details.

