Fun discovery today of confusing behavior with Rails functional test framework (at least version 2.3.4):
### controller ###
def create
comment = Comment.create!(:name => params[:name])
@result = { :id => comment.id }
respond_to do |format|
format.xml { render }
format.json { render :json => @result }
end
end
### functional test ###
def test_a_method
post :create, :name => "foo", :format => :json
assert_response :success
...
end
The above will fail on the assert_response with a 406 instead of a 200 success.
It's due to the :json symbol!
This works great:
def test_a_method
post :create, :name => "foo", :format => "json"
assert_response :success
...
end
Of course, remember that your params should be strings in your functional tests too... never rely on symbols such as:
post :create, :name => :this_should_not_be_a_string
Comments
Thanks so much, this saved me a lot of time!
Anu Mulukutla