Forum: Ruby on Rails Understanding how methods are made available within controller tests

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
1a6c6f6af9928f1851b5fd63849b1d23?d=identicon&s=25 Karl (Guest)
on 2009-03-13 10:41
(Received via mailing list)
Being new to rails and ruby, I am trying to figure out how things fit
together.  In particular i am trying to understand how attributes such
as "session" and "cookies" are made available to Controller tests.
Specifically I am working on a test from the RailsSpace book which
extends Test::Unit::TestCase and only imports the module
ApplicationHelper while attributes such as cookies and session are
defined within the ActionController::TestProcess module.   I cannot
figure out how module ActionController::TestProcess is included within
the UserControllerTest.

require File.dirname(__FILE__) + '/../test_helper'
require 'user_controller'

# Re-raise errors caught by the controller.
class UserController; def rescue_action(e) raise e end; end

class UserControllerTest < Test::Unit::TestCase
  include ApplicationHelper

..
..
 def authorize(user)
    @request.session[:user_id] = user.id
  end

  def friendly_url_forwarding_aux(test_page, protected_page, user)
    get protected_page
    assert_response :redirect
    assert_redirected_to :action => "login"
    post test_page, :user => user
    assert_response :redirect
    assert_redirected_to :action => protected_page
    assert_nil session[:protected_page]
  end

  def cookie_value(symbol)
    cookies[symbol.to_s].value.first
  end

  def cookie_expires(symbol)
    cookies[symbol.to_s].expires
  end

thx.

-karl
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-13 10:54
(Received via mailing list)
On Mar 13, 3:38 am, Karl <karl.b...@gmail.com> wrote:
> Being new to rails and ruby, I am trying to figure out how things fit
> together.  In particular i am trying to understand how attributes such
> as "session" and "cookies" are made available to Controller tests.
> Specifically I am working on a test from the RailsSpace book which
> extends Test::Unit::TestCase and only imports the module
> ApplicationHelper while attributes such as cookies and session are
> defined within the ActionController::TestProcess module.   I cannot
> figure out how module ActionController::TestProcess is included within
> the UserControllerTest.

The test_helper file that you require at the top of your test file in
turn requires a bunch of stuff, in particular a file that adds those
methods to test cases.

Fred
1a6c6f6af9928f1851b5fd63849b1d23?d=identicon&s=25 Karl Baum (Guest)
on 2009-03-13 18:56
(Received via mailing list)
Makes sense.  My only confusion is I thought that in ruby methods and
attributes can be imported to a class either through inheritance or
importing a module.  In this case, these extra attributes such as
"session"
or "cookies" do not exist within the parent class nor the imported
module.
 Is rails including extra modules within my classes at runtime?
Thanks for your help!

-karl

On Fri, Mar 13, 2009 at 5:53 AM, Frederick Cheung <
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-03-14 13:48
(Received via mailing list)
On Mar 13, 5:55 pm, Karl Baum <karl.b...@gmail.com> wrote:
> Makes sense.  My only confusion is I thought that in ruby methods and
> attributes can be imported to a class either through inheritance or
> importing a module.  In this case, these extra attributes such as "session"
> or "cookies" do not exist within the parent class nor the imported module.
>  Is rails including extra modules within my classes at runtime?
> Thanks for your help!
>
You can also just reopen a class and add methods to it. if my memory
is correct that is what rails does to Test::Unit::TestCase.

Fred
This topic is locked and can not be replied to.