test_helper.rb の Rails 本と Rails 1.0 の違い(Rails 勉強中 #3)

Agile Web Development With Rails の内容と、最新バージョンである Rails 1.0 の食い違いにより、何度かはまっているわけなのですが、同じようにはまる人がいるかもしれないので、気づいた点はここにメモしていくことにします。

P153 では、test_helper.rb の内容が以下の様に記述されています。

ENV["RAILS_ENV"] = "test"
require File.dirname(__FILE__) + "/../config/environment"
require 'application'
require 'test/unit'
require 'active_record/fixtures'
require 'action_controller/test_process'
require 'action_web_service/test_invoke'
require 'breakpoint'
def create_fixtures(*table_names)
  Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures", table_names)
end
Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"

が、1.0 では実際には以下の様になってます。(コメントや空行は省略)

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
class Test::Unit::TestCase
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = true
end

どうやら require 'test_help' がポイントらしい、というわけで、/usr/local/lib/ruby/gems/1.8/gems/rails-1.0.0/lib/test_help.rb を覗いてみると、こんな風になってます。(コメントや空行は省略)

require 'application'
silence_warnings { RAILS_ENV = "test" }
require 'test/unit'
require 'active_record/fixtures'
require 'action_controller/test_process'
require 'action_web_service/test_invoke'
require 'breakpoint'
Test::Unit::TestCase.fixture_path = RAILS_ROOT + "/test/fixtures/"
def create_fixtures(*table_names)
  Fixtures.create_fixtures(RAILS_ROOT + "/test/fixtures", table_names)
end

というわけで、test_helper.rb の内容は Rails 本とは異なり、一部が test_help.rb に移されてるんですね。そんだけです。