views:

494

answers:

3

Hi, I'm following along with RailsSpace: Building a Social Networking Website with Ruby on Rails by Michael Hartl. Running rails v2.3.2.

I've gotten to the 5th chapter in which testing is introduced. The following is supposed to match the title of the various pages to strings using the get method:

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

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

    class SiteControllerTest < Test::Unit::TestCase 
      def setup 
        @controller = SiteController.new 
        @request     = ActionController::TestRequest.new 
        @response   = ActionController::TestResponse.new 
      end 

      def test_index 
        get :index
        title = assigns(:title) 
        assert_equal "Welcome to RailsSpace!", title 
        assert_response :success 
        assert_template "index" 
        end 

      def test_about 
        get :title
        title = assigns(:title) 
        assert_equal "About RailsSpace", title 
        assert_response :success 
        assert_template "about" 
      end 

      def test_help 
        get :help
        title = assigns(:title) 
        assert_equal "RailsSpace Help", title 
        assert_response :success 
        assert_template "help" 
      end 
    end

On compiling I get:

Loaded suite site_controller_test
Started
EEE
Finished in 0.057 seconds.

  1) Error:
test_about(SiteControllerTest):
NoMethodError: undefined method `get' for #<SiteControllerTest:0x4854b30>
    site_controller_test.rb:23:in `test_about'

  2) Error:
test_help(SiteControllerTest):
NoMethodError: undefined method `get' for #<SiteControllerTest:0x4854b1c>
    site_controller_test.rb:31:in `test_help'

  3) Error:
test_index(SiteControllerTest):
NoMethodError: undefined method `get' for #<SiteControllerTest:0x485470c>
    site_controller_test.rb:15:in `test_index'

3 tests, 0 assertions, 0 failures, 3 errors

Other people have had this issue and the only proposed solution is just to reinstall. I'm not to enthused by this. Since this is an older book there this is probably just breakage between rails versions. What would be the equivalent of this for rails v2.3.2?

A: 

Try changing Test::Unit::TestCase to ActionController::TestCase.

You should be able to remove the setup method then too.
Shadwell
+1  A: 

One other thing you might like to know is that Railspace has evolved into Insoshi so the latest code is available there. Might be handy for you when you run into other issues.

srboisvert
Thank you, it's good they still have updated this stuff.
deeb
+2  A: 

Replace all the following code

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

class SiteControllerTest < Test::Unit::TestCase 
  def setup 
    @controller = SiteController.new 
    @request     = ActionController::TestRequest.new 
    @response   = ActionController::TestResponse.new 
  end

with

class SiteControllerTest < ActionController::TestCase

The code you are using refers to Rails 2.0/2.1.

Simone Carletti