diff --git a/lib/rspec/rails/example/system_example_group.rb b/lib/rspec/rails/example/system_example_group.rb index 59c5606cca..1c0ba442a0 100644 --- a/lib/rspec/rails/example/system_example_group.rb +++ b/lib/rspec/rails/example/system_example_group.rb @@ -38,10 +38,18 @@ def passed? # @private def method_name - @method_name ||= [ - self.class.name.underscore, - RSpec.current_example.description.underscore - ].join("_").tr(CHARS_TO_TRANSLATE.join, "_")[0...200] + "_#{rand(1000)}" + @method_name ||= begin + m = [ + self.class.name.underscore, + RSpec.current_example.description.underscore + ].join("_").tr(CHARS_TO_TRANSLATE.join, "_") + + if RbConfig::CONFIG["host_os"] =~ /linux/ + m.byteslice(0...200).scrub("") + "_#{rand(1000)}" + else + m[0...200] + "_#{rand(1000)}" + end + end end # Delegates to `Rails.application`. diff --git a/spec/rspec/rails/example/system_example_group_spec.rb b/spec/rspec/rails/example/system_example_group_spec.rb index 862f8cdda2..123f71bb4e 100644 --- a/spec/rspec/rails/example/system_example_group_spec.rb +++ b/spec/rspec/rails/example/system_example_group_spec.rb @@ -16,6 +16,17 @@ module RSpec::Rails expect(example.send(:method_name)).to start_with('method_name') end end + + it 'slices long method name' do + group = RSpec::Core::ExampleGroup.describe ActionPack do + include SystemExampleGroup + end + + example = group.new + example_class_mock = double('name' => "#{'あ'*100}") + allow(example).to receive(:class).and_return(example_class_mock) + expect(example.send(:method_name).bytesize).to be <= 210 + end end describe '#driver' do