Method undefined in integration test

Hello list,

I’m having problems with the following integration test (tests for the
authentication aspects of the application):

require “#{File.dirname(FILE)}/…/test_helper”

class AuthenticationTest < ActionController::IntegrationTest

fixtures :your, :models

def test_successful_login
george = enter_site(:george)

end

module BrowsingTestDSL
include ERB::Util
attr_writer :name

def tries_to_go_to_admin
  get "/admin/book/new"
  assert_response :redirect
  assert_redirected_to "/account/login"
end

def enter_site(name)
  open_session do |session|
    session.extend(BrowsingTestDSL)
    session.name = name
    yield session if block_given?
  end

end

end

end

When I run this test, rails tell me test_site() is undefined, however,
I’ve
declared it inside the private module (I’m using the module to implement
this test’s DSL, as seen in the book Beginning Ruby on Rails E-Commerce
from
Apress).

Here’s the output:

"Loaded suite test/integration/authentication_test
Started
E
Finished in 0.312 seconds.

  1. Error:
    test_successful_login(AuthenticationTest):
    NoMethodError: undefined method enter_site' for #<ActionController::Integration::Session:0x4751620> c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/test_process.rb:452:inmeod_missing’
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:547:in
    sen c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:547:inmetd_missing’
    test/integration/authentication_test.rb:7:in test_successful_login' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:453:inrun
    1 tests, 0 assertions, 0 failures, 1 errors"

What am I doing wrong ?

Thanks in advance,

Marcelo.

Hi –

On Sun, 19 Aug 2007, Marcelo de Moraes S. wrote:

def test_successful_login

   yield session if block_given?

Finished in 0.312 seconds.
test/integration/authentication_test.rb:7:in test_successful_login' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:453:inrun
1 tests, 0 assertions, 0 failures, 1 errors"

What am I doing wrong ?

Your module isn’t included (in the sense of “include ModuleName”) in
your class. So instances of your class do not have the module in
their method lookup path.

Here’s a very small version, with the include instruction added:

class C
def x
y
end

 module M
   def y
     puts "hi"
   end
 end

 include M    # This is the key line

end

The fact that the module is nested in the class doesn’t matter; it’s
still just a module (C::M in my case), and it has to be included in
any class that wants its objects to have access to it.

David

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs