Skip to content

Commit 461ac59

Browse files
committed
Fix clash with methods named fixture in test cases
Fix: rails#51213 (comment)
1 parent 5411787 commit 461ac59

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

activerecord/lib/active_record/test_fixtures.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def load_instances?
255255

256256
def method_missing(method, ...)
257257
if fixture_sets.key?(method.name)
258-
fixture(method, ...)
258+
_active_record_fixture(method, ...)
259259
else
260260
super
261261
end
@@ -269,13 +269,14 @@ def respond_to_missing?(method, include_private = false)
269269
end
270270
end
271271

272-
def fixture(fixture_set_name, *fixture_names)
272+
def _active_record_fixture(fixture_set_name, *fixture_names)
273273
if fs_name = fixture_sets[fixture_set_name.name]
274274
access_fixture(fs_name, *fixture_names)
275275
else
276276
raise StandardError, "No fixture set named '#{fixture_set_name.inspect}'"
277277
end
278278
end
279+
alias_method :fixture, :_active_record_fixture
279280

280281
def access_fixture(fs_name, *fixture_names)
281282
force_reload = fixture_names.pop if fixture_names.last == true || fixture_names.last == :reload

activerecord/test/cases/fixtures_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,31 @@ def test_fixtures
604604
ensure
605605
ENV["DATABASE_URL"] = db_url_tmp
606606
end
607+
608+
def test_fixture_method_and_private_alias
609+
assert_equal "The First Topic", topics(:first).title
610+
assert_equal "The First Topic", fixture(:topics, :first).title
611+
assert_equal "The First Topic", _active_record_fixture(:topics, :first).title
612+
end
613+
614+
def test_fixture_method_does_not_clash_with_a_test_case_method
615+
test_case = Class.new(ActiveRecord::TestCase) do
616+
fixtures :accounts
617+
618+
def test_fixtures
619+
assert accounts(:signals37)
620+
end
621+
622+
private
623+
def fixture
624+
Account.new
625+
end
626+
end
627+
628+
result = test_case.new(:test_fixtures).run
629+
630+
assert_predicate result, :passed?, "Expected #{result.name} to pass:\n#{result}"
631+
end
607632
end
608633

609634
class HasManyThroughFixture < ActiveRecord::TestCase

0 commit comments

Comments
 (0)