-
-
Notifications
You must be signed in to change notification settings - Fork 282
Description
- Create sample RSpec file like this:
RSpec.describe "Something", "in this context", :a, :b do
subject { true }
it "works well" do
expect(subject).not_to be false
end
end
- Run it with documentation formatter:
rspec --format documentation spec/test_spec.rb
Something in this context
works well
Finished in 0.00172 seconds (files took 0.07348 seconds to load)
1 example, 0 failures
- Run autocorrect:
rubocop -A spec/test_spec.rb
Inspecting 1 file
C
Offenses:
spec/test_spec.rb:1:29: C: [Corrected] RSpec/SortMetadata: Sort metadata alphabetically.
RSpec.describe "Something", "in this context", :a, :b do
^^^^^^^^^^^^^^^^^^^^^^^^^
1 file inspected, 1 offense detected, 1 offense corrected
File updated to:
RSpec.describe "Something", :a, :b, "in this context" do
subject { true }
it "works well" do
expect(subject).not_to be false
end
end
- Run it again:
rspec --format documentation spec/test_spec.rb
An error occurred while loading ./spec/test_spec.rb.
Failure/Error:
RSpec.describe "Something", :a, :b, "in this context" do
subject { true }
it "works well" do
expect(subject).not_to be false
end
end
ArgumentError:
wrong number of arguments (given 4, expected 0..2)
# ./spec/test_spec.rb:1:in `<top (required)>'
No examples found.
Finished in 0.00001 seconds (files took 0.10503 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
The number of arguments expected is from #build_description_from(parent_description=nil, my_description=nil)
in lib/rspec/core/metadata.rb
from rspec-core.
We sometimes use this ability to have an additional description parameter with RSpec.describe
when writing spec for a specific feature flag or to split up a spec file in smaller parts when it becomes too big. Occasionally the RSpec/SortMetadata
breaks it depending on the metadata we use by swapping the description and the symbols like above. We disable the cop for the line and that's ok, but it would be nice to have it fixed upstream.
It seems like it is somewhat an expected behavior though:
rubocop-rspec/spec/rubocop/cop/rspec/sort_metadata_spec.rb
Lines 98 to 111 in ff213ae
it 'registers an offense when using mixed metadata ' \ | |
'and both symbols metadata and hash keys are not in alphabetical order ' \ | |
'and the hash values are complex objects' do | |
expect_offense(<<~RUBY) | |
it 'Something', variable, 'B', :a, key => {}, foo: ->(x) { bar(x) }, Identifier.sample => true, baz: Snafu.new do | |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sort metadata alphabetically. | |
end | |
RUBY | |
expect_correction(<<~RUBY) | |
it 'Something', :a, 'B', variable, baz: Snafu.new, foo: ->(x) { bar(x) }, Identifier.sample => true, key => {} do | |
end | |
RUBY | |
end |