rspec-mocks
rspec-mocks copied to clipboard
`stub_const` doesn't clear `Class#subclasses`
Subject of the issue
When stub_const
is used with a class that is a subclass of another, the class is still listed in subclasses of this parent after each spec.
Your environment
- Ruby version: 3.1.4
- rspec-mocks version: 3.12.6
Steps to reproduce
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
gem "rspec", "3.12.0" # Activate the gem and version you are reporting the issue against.
gem 'rspec-mocks', '3.12.6'
end
puts "Ruby version is: #{RUBY_VERSION}" # Ruby version is: 3.1.4
class Something; end
describe 'Test' do
before(:each) do
class A < Something; end
stub_const('B', Class.new(Something))
end
it 'something' do
puts Something.subclasses # => [B, A]
end
it 'something else' do
puts Something.subclasses # => [B, B, A]
# Only one occurence of B should be listed
end
end
Expected behavior
Something.subclasses
always have to return [B, A]
and be the same for each spec.
Actual behavior
Something.subclasses
still return every stubbed classes.