#post method in tests with a different controller
- Posted Tuesday, November 14th, 2006 at 6:46 PM
- |
- Ruby
Note: If you enjoy this article, you might also check out the Geeky Stuff section.
I wanted a #login method in test_helper that would allow me to easily login from any of my functional tests. However, the #post method won’t allow you to set a different controller than the one in the @controller instance variable that’s defined in your test’s #setup. Well, by looking at how the #process method works, you can see that it just grabs the controller from @controller. Redefine that, and you’re good to go:
Ruby
@controller = LoginController.new
post(
:attempt_login,
{:user => {:name => ‘joe’, :password => ‘password’}}
)
@controller = old_controller
If you have several login methods, such as a #login_admin and #login_regular, you could make a wrapper to reduce duplication:
Ruby
old_controller = @controller
@controller = new_controller.new
yield
@controller = old_controller
end
def login_admin
wrap_with_controller do
post(
:attempt_login,
{:user => {:name => ‘root’, :password => ‘password’}}
)
end
end
def login_regular
wrap_with_controller do
post(
:attempt_login,
{:user => {:name => ‘joe’, :password => ‘password’}}
)
end
end
Cross-posted on my BigBold account.