提交 a7139008 编写于 作者: Y Yves Senn

isolate class attribute assignment in `migration_test.rb`

This makes the tests inside `migration_test.rb` order independent.
The assignments to `Reminder.table_name_prefix` and `Reminder.table_name_suffix`
previously leaked and had impact on following test cases.

This patch isolates the assignments on a throw-away subclass.
上级 f0052437
......@@ -328,6 +328,7 @@ def test_schema_migrations_table_name
end
def test_proper_table_name_on_migrator
reminder_class = new_isolated_reminder_class
assert_deprecated do
assert_equal "table", ActiveRecord::Migrator.proper_table_name('table')
end
......@@ -335,30 +336,30 @@ def test_proper_table_name_on_migrator
assert_equal "table", ActiveRecord::Migrator.proper_table_name(:table)
end
assert_deprecated do
assert_equal "reminders", ActiveRecord::Migrator.proper_table_name(Reminder)
assert_equal "reminders", ActiveRecord::Migrator.proper_table_name(reminder_class)
end
Reminder.reset_table_name
reminder_class.reset_table_name
assert_deprecated do
assert_equal Reminder.table_name, ActiveRecord::Migrator.proper_table_name(Reminder)
assert_equal reminder_class.table_name, ActiveRecord::Migrator.proper_table_name(reminder_class)
end
# Use the model's own prefix/suffix if a model is given
ActiveRecord::Base.table_name_prefix = "ARprefix_"
ActiveRecord::Base.table_name_suffix = "_ARsuffix"
Reminder.table_name_prefix = 'prefix_'
Reminder.table_name_suffix = '_suffix'
Reminder.reset_table_name
reminder_class.table_name_prefix = 'prefix_'
reminder_class.table_name_suffix = '_suffix'
reminder_class.reset_table_name
assert_deprecated do
assert_equal "prefix_reminders_suffix", ActiveRecord::Migrator.proper_table_name(Reminder)
assert_equal "prefix_reminders_suffix", ActiveRecord::Migrator.proper_table_name(reminder_class)
end
Reminder.table_name_prefix = ''
Reminder.table_name_suffix = ''
Reminder.reset_table_name
reminder_class.table_name_prefix = ''
reminder_class.table_name_suffix = ''
reminder_class.reset_table_name
# Use AR::Base's prefix/suffix if string or symbol is given
ActiveRecord::Base.table_name_prefix = "prefix_"
ActiveRecord::Base.table_name_suffix = "_suffix"
Reminder.reset_table_name
reminder_class.reset_table_name
assert_deprecated do
assert_equal "prefix_table_suffix", ActiveRecord::Migrator.proper_table_name('table')
end
......@@ -368,28 +369,29 @@ def test_proper_table_name_on_migrator
end
def test_proper_table_name_on_migration
reminder_class = new_isolated_reminder_class
migration = ActiveRecord::Migration.new
assert_equal "table", migration.proper_table_name('table')
assert_equal "table", migration.proper_table_name(:table)
assert_equal "reminders", migration.proper_table_name(Reminder)
Reminder.reset_table_name
assert_equal Reminder.table_name, migration.proper_table_name(Reminder)
assert_equal "reminders", migration.proper_table_name(reminder_class)
reminder_class.reset_table_name
assert_equal reminder_class.table_name, migration.proper_table_name(reminder_class)
# Use the model's own prefix/suffix if a model is given
ActiveRecord::Base.table_name_prefix = "ARprefix_"
ActiveRecord::Base.table_name_suffix = "_ARsuffix"
Reminder.table_name_prefix = 'prefix_'
Reminder.table_name_suffix = '_suffix'
Reminder.reset_table_name
assert_equal "prefix_reminders_suffix", migration.proper_table_name(Reminder)
Reminder.table_name_prefix = ''
Reminder.table_name_suffix = ''
Reminder.reset_table_name
reminder_class.table_name_prefix = 'prefix_'
reminder_class.table_name_suffix = '_suffix'
reminder_class.reset_table_name
assert_equal "prefix_reminders_suffix", migration.proper_table_name(reminder_class)
reminder_class.table_name_prefix = ''
reminder_class.table_name_suffix = ''
reminder_class.reset_table_name
# Use AR::Base's prefix/suffix if string or symbol is given
ActiveRecord::Base.table_name_prefix = "prefix_"
ActiveRecord::Base.table_name_suffix = "_suffix"
Reminder.reset_table_name
reminder_class.reset_table_name
assert_equal "prefix_table_suffix", migration.proper_table_name('table', migration.table_name_options)
assert_equal "prefix_table_suffix", migration.proper_table_name(:table, migration.table_name_options)
end
......@@ -538,6 +540,15 @@ def with_env_tz(new_tz = 'US/Eastern')
ensure
old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
end
# This is needed to isolate class_attribute assignments like `table_name_prefix`
# for each test case.
def new_isolated_reminder_class
Class.new(Reminder) {
def self.name; "Reminder"; end
def self.base_class; self; end
}
end
end
class ReservedWordsMigrationTest < ActiveRecord::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册