class RuboCop::Cop::RSpec::InstanceVariable
Checks for instance variable usage in specs.
This cop can be configured with the option `AssignmentOnly` which will configure the cop to only register offenses on instance variable usage if the instance variable is also assigned within the spec
@example
# bad describe MyClass do before { @foo = [] } it { expect(@foo).to be_empty } end # good describe MyClass do let(:foo) { [] } it { expect(foo).to be_empty } end
@example with AssignmentOnly configuration
# rubocop.yml # RSpec/InstanceVariable: # AssignmentOnly: false # bad describe MyClass do before { @foo = [] } it { expect(@foo).to be_empty } end # allowed describe MyClass do it { expect(@foo).to be_empty } end # good describe MyClass do let(:foo) { [] } it { expect(foo).to be_empty } end
Constants
- EXAMPLE_GROUP_METHODS
- MSG
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/rspec/instance_variable.rb, line 64 def on_block(node) return unless spec_group?(node) ivar_usage(node) do |ivar, name| return if inside_dynamic_class?(ivar) return if assignment_only? && !ivar_assigned?(node, name) add_offense(ivar, location: :expression) end end
Private Instance Methods
assignment_only?()
click to toggle source
# File lib/rubocop/cop/rspec/instance_variable.rb, line 81 def assignment_only? cop_config['AssignmentOnly'] end
inside_dynamic_class?(node)
click to toggle source
# File lib/rubocop/cop/rspec/instance_variable.rb, line 77 def inside_dynamic_class?(node) node.each_ancestor(:block).any? { |block| dynamic_class?(block) } end