From c9132e06a17c128f9af676712f440d254c4eb47b Mon Sep 17 00:00:00 2001 From: Benoit Tigeot Date: Wed, 13 Jan 2021 21:57:46 +0100 Subject: [PATCH] Add a file repro app to test the fix on fixture_support name --- lib/rspec/rails/fixture_support.rb | 12 +++---- .../rails_app/partial_active_record_false.rb | 31 +++++++++++++++++++ .../partial_active_record_false_spec.rb | 30 ++++++++++++++++++ 3 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 spec/rspec/rails/features/rails_app/partial_active_record_false.rb create mode 100644 spec/rspec/rails/features/rails_app/partial_active_record_false_spec.rb diff --git a/lib/rspec/rails/fixture_support.rb b/lib/rspec/rails/fixture_support.rb index 2161b115c6..e3fa5a0ca1 100644 --- a/lib/rspec/rails/fixture_support.rb +++ b/lib/rspec/rails/fixture_support.rb @@ -9,6 +9,12 @@ module FixtureSupport include RSpec::Rails::MinitestAssertionAdapter include ActiveRecord::TestFixtures + if ::Rails.version.to_f >= 6.1 + def name + @example + end + end + included do if RSpec.configuration.use_active_record? include Fixtures @@ -51,12 +57,6 @@ def proxy_method_warning_if_called_in_before_context_scope(method_name) end end - if ::Rails.version.to_f >= 6.1 - # @private return the example name for TestFixtures - def name - @example - end - end end end end diff --git a/spec/rspec/rails/features/rails_app/partial_active_record_false.rb b/spec/rspec/rails/features/rails_app/partial_active_record_false.rb new file mode 100644 index 0000000000..5c455f4218 --- /dev/null +++ b/spec/rspec/rails/features/rails_app/partial_active_record_false.rb @@ -0,0 +1,31 @@ +require "bundler/inline" + +gemfile(true) do + source "https://rubygems.org" + + git_source(:github) { |repo| "https://github.com/#{repo}.git" } + + gem "rails", (ENV["RAILS_VERSION"] || "~> 6.0.0") + gem "rspec-rails", path: "./" + gem "sqlite3" + gem "ammeter" +end + +require "active_record/railtie" + +require "ammeter" +require "rspec/autorun" +require "rspec/rails" + +class Command +end + +RSpec.configure do |config| + config.use_active_record = false +end + +RSpec.describe Command do + it 'should not break' do + Command.new + end +end diff --git a/spec/rspec/rails/features/rails_app/partial_active_record_false_spec.rb b/spec/rspec/rails/features/rails_app/partial_active_record_false_spec.rb new file mode 100644 index 0000000000..472f600595 --- /dev/null +++ b/spec/rspec/rails/features/rails_app/partial_active_record_false_spec.rb @@ -0,0 +1,30 @@ +RSpec.describe 'Rails app with use_active_record = false but active record railties loaded' do + it 'properly handles name scope in fixture_support' do + cmd = 'ruby spec/rspec/rails/features/rails_app/partial_active_record_false.rb' + cmd_status = ruby_script_runner(cmd) + expect(cmd_status[:stdout].last&.chomp).to eq("1 example, 0 failures") + expect(cmd_status[:exitstatus]).to eq(0) + end + + def ruby_script_runner(cmd) + require 'open3' + cmd_status = { stdout: [], exitstatus: nil } + Open3.popen2(cmd) do |_stdin, stdout, wait_thr| + frame_stdout do + while line = stdout.gets + puts "| #{line}" + cmd_status[:stdout] << line if line =~ /\d+ (example|examples), \d+ failure/ + end + end + cmd_status[:exitstatus] = wait_thr.value.exitstatus + end + cmd_status + end + + def frame_stdout + puts + puts '-' * 50 + yield + puts '-' * 50 + end +end