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 = "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 = "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
=> 1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class BikleTest < Test::Unit::TestCase
4 def setup
5 @string10 = "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/active_support/dependencies.rb:213:in
`require'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:182:in `activate'
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 `activate'
from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:167:in `activate'
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 `activate'
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
/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 = 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