From: Dan Bikle Date: 2005-10-31T04:24:10+09:00 Subject: [rails] attaching the debugger to functional test. 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