[rails] attaching the debugger to functional test.

D

Dan Bikle

People,

I'm trying to run the ruby debugger against a Test::Unit::TestCase class
which is a parent of a Rails class.

I started my study with a simple script:

#
# bikle_test.rb
#
require 'test/unit'

class BikleTest < Test::Unit::TestCase
def setup
@string10 =3D "hello"
end
def test10
assert_equal @string10, "hello"
end
end


The following command line works great:

ruby -r debug bikle_test.rb


Next, I create a new rails application with this command line:

rails rtest

Then, I create a database.yml:

test:
adapter: sqlite3
dbfile: db/rtest.db

Then I copied bikle_test.rb to...

rtest/test/functional/

I altered it a bit so it behaves like a typical Rails test:


#
# bikle_test.rb
#
require File.dirname(__FILE__) + '/../test_helper'

class BikleTest < Test::Unit::TestCase
def setup
@string10 =3D "hello"
end
def test10
assert_equal @string10, "hello"
end
end


When I run it, I see this:

zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$ ls
/=09=09../=09=09bikle_test.rb
zmac11:/cd/railsdemos/rtest/test/functional oracle$ ruby b*
Loaded suite bikle_test
Started
 
D

Dan Bikle

People,

I got a good tip from the yahoo ba-rb group on this subject.

The tip is to...
'Ignore the error and just press c to continue'

the tip worked for me.

-Dan


People,

I'm trying to run the ruby debugger against a Test::Unit::TestCase class
which is a parent of a Rails class.

I started my study with a simple script:

#
# bikle_test.rb
#
require 'test/unit'

class BikleTest < Test::Unit::TestCase
def setup
@string10 =3D "hello"
end
def test10
assert_equal @string10, "hello"
end
end


The following command line works great:

ruby -r debug bikle_test.rb


Next, I create a new rails application with this command line:

rails rtest

Then, I create a database.yml:

test:
adapter: sqlite3
dbfile: db/rtest.db

Then I copied bikle_test.rb to...

rtest/test/functional/

I altered it a bit so it behaves like a typical Rails test:


#
# bikle_test.rb
#
require File.dirname(__FILE__) + '/../test_helper'

class BikleTest < Test::Unit::TestCase
def setup
@string10 =3D "hello"
end
def test10
assert_equal @string10, "hello"
end
end


When I run it, I see this:

zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$ ls
./ ../ bikle_test.rb
zmac11:/cd/railsdemos/rtest/test/functional oracle$ ruby b*
Loaded suite bikle_test
Started
.
Finished in 0.131351 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$


When I try to run it in the debugger I see this:


zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$ ruby -r debug b*
Debug.rb
Emacs support available.

bikle_test.rb:1:
(rdb:1) l
[-4, 5] in bikle_test.rb
=3D> 1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class BikleTest < Test::Unit::TestCase
4 def setup
5 @string10 =3D "hello"
6 end
7 def test10
8 assert_equal @string10, "hello"
9 end
10 end
11
12
(rdb:1) b 5
Set breakpoint 1 at bikle_test.rb:5
(rdb:1) c
/opt/local/lib/ruby/1.8/drb/drb.rb:1572: `DRb::DRbServerNotFound'
(DRb::DRbServerNotFound)
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.= rb:21:in
`require'
from /opt/local/lib/ruby/gems/1.8/gems/activesupport-1.2.1/lib/ac= tive_support/dependencies.rb:213:in
`require'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:182:in `acti= vate'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:181:in `each= '
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:181:in `acti= vate'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:167:in `acti= vate'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:166:in `each= '
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:166:in `acti= vate'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.= rb:26:in
`require'
from /Users/oracle/CD/railsdemos/rtest/config/boot.rb:14
from /Users/oracle/CD/railsdemos/rtest/config/environment.rb:8:in= `require'
from /Users/oracle/CD/railsdemos/rtest/config/environment.rb:8
from ./../test_helper.rb:2:in `require'
from ./../test_helper.rb:2
from bikle_test.rb:1:in `require'
from bikle_test.rb:1
=1A=1A/opt/local/lib/ruby/1.8/drb/drb.rb:1572:
(rdb:1) q
Really quit? (y/n) y
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$
zmac11:/cd/railsdemos/rtest/test/functional oracle$


So, it's telling me that it is looking for a DRb Server.

Question 1:
Why does it need to talk with a DRb Server?

Outside of Rails... it does not need to talk with a DRb Server.

Question 2:
How do I start a DRb Server which would make the debugger happy?

I looked in the DT-PickAxe book and found this:

# Sample code from Programing Ruby, page 399
require 'drb'

class TestServer
def add(*args)
args.inject {|n,v| n + v}
end
end

server =3D TestServer.new
DRb.start_service('druby://localhost:9000', server)
DRb.thread.join # Don't exit just yet!


So, it looks like I give the server a port to listen on
which would be easy enough.

But, how do I then tell the debugger what that port is?

Can any of you offer any insight, solutions, or ideas to experiment with?

Thanks,

-Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top