I have this code in my controller and want to test this code line with a functional test.
raise ActiveRecord::RecordNotFound if @post.nil?
which assert method should I use?
I use the built-in rails 2.3.5 test framework.
I tried it with this code:
test "should return 404 if page doesn't exist." do
get :show, :url => ["nothing", "here"]
assert_response :missing
end
but it doesn’t work for me. Got this test output:
test_should_return_404_if_page_doesn't_exist.(PageControllerTest):
ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound
app/controllers/page_controller.rb:7:in `show'
/test/functional/page_controller_test.rb:21:in `test_should_return_404_if_page_doesn't_exist.'
There are two things you can do. The first is to let ActionController provide the default action when it rescues ActiveRecord::RecordNotFound:
Using this method, you can’t assert what gets rendered. You have to trust Rails/ActionController not to change behaviour.
An alternative, which I’ve sometimes used, is this:
You should read more about #rescue_from on the ActiveSupport API.
For simplicity, I usually go with my 1st solution though.