# Can't test application controller methods in functional tests?

**URL:** <https://www.ruby-forum.com/t/cant-test-application-controller-methods-in-functional-tests/125851>\
**Category:** Rails\
**Created:** [January 12, 2008, 8:32pm UTC](https://www.ruby-forum.com/t/cant-test-application-controller-methods-in-functional-tests/125851 "2008-01-12T20:32:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![taro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/df705f/32.png) [@taro](https://www.ruby-forum.com/u/taro)\
**Post date:** [January 12, 2008, 8:32pm UTC](https://www.ruby-forum.com/t/cant-test-application-controller-methods-in-functional-tests/125851/1 "2008-01-12T20:32:59Z")

</div>

I have two methods in application controller that I want to test from  
ForumController:

* * *

## class ApplicationController \< ActionController::Base … def logout session[:username] = nil session[:admin] = nil redirect\_to(request.request\_uri) end … def home redirect\_to(:controller =\> ‘forum’, :action =\> ‘list\_forum’) end

## class ForumController \< ApplicationController layout “forum” … end

For method home, action list\_forum works according to my test, so that  
shouldn’t be the problem. The corresponding tests gives errors:

* * *

require File.dirname( **FILE** ) + ‘/…/test\_helper’  
require ‘forum\_controller’

# Re-raise errors caught by the controller.

class ForumController; def rescue\_action(e) raise e end; end

class ForumControllerTest \< Test::Unit::TestCase  
#add fixtures:  
fixtures :messages, :message\_threads, :message\_boards, :forums

def setup  
@controller = ForumController.new  
@request = ActionController::TestRequest.new  
@response = ActionController::TestResponse.new  
end  
…

# test logout (all cases)

def test\_logout  
get :logout, nil, nil  
assert\_response :success  
assert\_nil session[:username]  
assert\_nil session[:admin]

```
get :logout, nil, {:username => 'bogus'}
assert_response :success
assert_nil session[:username]
assert_nil session[:admin]

get :logout, nil, {:username => 'Admin', :admin => 1}
assert_response :success
assert_nil session[:username]
assert_nil session[:admin]

```

end

# test home

## def test\_home get :home assert\_response :success assert\_redirected\_to ‘list\_forum’ assert\_not\_nil assigns[“forums”] end end

1. Error:  
test\_home(ForumControllerTest):  
ActionController::RoutingError: No route matches  
{:action=\>“home”, :controller=\>“forum”}  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/routing.rb:1299:in `generate' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/routing.rb:1244:in`generate\_extras’  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/routing.rb:1240:in `extra_keys' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/test_process.rb:105:in`assign\_parameters’  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/test\_process.rb:380:in `process' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/test_process.rb:356:in`get’  
forum\_controller\_test.rb:464:in `test\_home’

2. Error:  
test\_logout(ForumControllerTest):  
ActionController::RoutingError: No route matches  
{:action=\>“logout”, :controller=\>“forum”}  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/routing.rb:1299:in `generate' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/routing.rb:1244:in`generate\_extras’  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/routing.rb:1240:in `extra_keys' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/test_process.rb:105:in`assign\_parameters’  
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/  
action\_controller/test\_process.rb:380:in `process' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/ action_controller/test_process.rb:356:in`get’  
forum\_controller\_test.rb:446:in `test\_logout’

* * *

What’s up with that? Can I not test ApplicationController methods in  
ForumController?

Also, how can I set requested uri?
