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 60
def on_block(node)
  return unless spec_group?(node)

  ivar_usage(node) do |ivar, name|
    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 72
def assignment_only?
  cop_config['AssignmentOnly']
end