Can I add a singleton action to @controller in a test?

All,

I want to create a mock action to test a filter in a functional test,
e.g.:

# Simplified example
def test_my_filter
    # Singleton action
    def @controller.foo
      assert # something
    end

    ActionController::Routing::Routes.draw do |map|
      map.connect ':controller/foo', :action => 'foo'
    end

    get :foo
end

My log files show that no action responds to foo, so I think I'm not
doing the routing properly. I'm trying this in
ApplicationControllerTest, if that matters. Is anything obviously wrong
here?

Thanks for taking the time to read this,

Brian

The routing stuff is irrelevant as routing isn't used in functional tests (the tests know that since you've got @controller you want to invoke actions from there). If you look at the action controller code, rails decides whether or not a action exists by looking at the class' instance methods, so singleton methods don't get a look in. could you not just define a method in the class (and undef it afterwards if you want) or ever create a controller class on the fly just with that action it

Fred

Frederick Cheung wrote:
[...]

The routing stuff is irrelevant as routing isn't used in functional
tests (the tests know that since you've got @controller you want to
invoke actions from there). If you look at the action controller code,
rails decides whether or not a action exists by looking at the class'
instance methods, so singleton methods don't get a look in. could you
not just define a method in the class (and undef it afterwards if you
want) or ever create a controller class on the fly just with that
action it

Fred
--
My ramblings: http://www.spacevatican.org

I did the latter and it worked very well. Thanks Fred!