From a4289563d55a6c4f6f0bd840bda7da4c840c27d6 Mon Sep 17 00:00:00 2001 From: Edouard CHIN Date: Mon, 2 Dec 2019 15:30:25 +0100 Subject: [PATCH] Fix `WrongScopeError` being thrown on Rails master: - ### Problem Rails made a change in rails/rails@d4367eb72601f6e5bba3206443e9d141e9753af8 and TestFixtures don't make use of `method_name` anymore, but simply `name`. `name` on RSpec raises a `WrongScopeError` when called within an example. This patch overrides `name` to return the example name instead. --- lib/rspec/rails/fixture_support.rb | 6 ++++++ spec/rspec/rails/fixture_support_spec.rb | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/rspec/rails/fixture_support.rb b/lib/rspec/rails/fixture_support.rb index 1855588261..e01728dfa5 100644 --- a/lib/rspec/rails/fixture_support.rb +++ b/lib/rspec/rails/fixture_support.rb @@ -50,6 +50,12 @@ def self.proxy_method_warning_if_called_in_before_context_scope(method_name) end end + if ::ActiveRecord.version >= Gem::Version.new('6.1.0.alpha') + def name + @example + end + end + fixtures RSpec.configuration.global_fixtures if RSpec.configuration.global_fixtures end end diff --git a/spec/rspec/rails/fixture_support_spec.rb b/spec/rspec/rails/fixture_support_spec.rb index 29243db089..81aa454c56 100644 --- a/spec/rspec/rails/fixture_support_spec.rb +++ b/spec/rspec/rails/fixture_support_spec.rb @@ -13,5 +13,13 @@ module RSpec::Rails expect(group).to respond_to(:fixture_path=) end end + + it "doesn't raise a WrongScopeError", skip: ::ActiveRecord.version < Gem::Version.new('6.1.0.alpha') do + group = RSpec::Core::ExampleGroup.describe do + include FixtureSupport + end + + expect { group.new.name }.to_not raise_error + end end end