Class: RuboCop::Cop::RSpec::MultipleSubjects
- Extended by:
- AutoCorrector
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/rspec/multiple_subjects.rb
Overview
Checks if an example group defines ‘subject` multiple times.
This cop does not support autocorrection in some cases. The autocorrect behavior for this cop depends on the type of duplication:
- If multiple named subjects are defined then this probably indicates
that the overwritten subjects (all subjects except the last
definition) are effectively being used to define helpers. In this
case they are replaced with `let`.
- If multiple unnamed subjects are defined though then this can *only*
be dead code and we remove the overwritten subject definitions.
- If subjects are defined with `subject!` then we don't autocorrect.
This is enough of an edge case that people can just move this to
a `before` hook on their own
Constant Summary collapse
- MSG =
'Do not set more than one subject per example group'
Instance Method Summary collapse
-
#on_block(node) ⇒ Object
rubocop:disable InternalAffairs/NumblockHandler.
Methods inherited from Base
inherited, #on_new_investigation
Methods included from RSpec::Language
#example?, #example_group?, #example_group_with_body?, #explicit_rspec?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?
Instance Method Details
#on_block(node) ⇒ Object
rubocop:disable InternalAffairs/NumblockHandler
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rubocop/cop/rspec/multiple_subjects.rb', line 57 def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler return unless example_group?(node) subjects = RuboCop::RSpec::ExampleGroup.new(node).subjects subjects[0...-1].each do |subject| add_offense(subject) do |corrector| autocorrect(corrector, subject) end end end |