Class: RuboCop::Cop::RSpec::InstanceVariable

Inherits:
Cop
  • Object
show all
Defined in:
lib/rubocop/cop/rspec/instance_variable.rb

Overview

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

Examples:

# 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

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

Constant Summary collapse

MSG =
'Use `let` instead of an instance variable.'.freeze
EXAMPLE_GROUP_METHODS =
ExampleGroups::ALL + SharedGroups::ALL

Constants inherited from Cop

Cop::DEFAULT_CONFIGURATION

Constants included from RSpec::Language

RSpec::Language::ALL

Instance Method Summary collapse

Methods inherited from Cop

inherited, #relevant_file?

Instance Method Details

#on_block(node) ⇒ Object



60
61
62
63
64
65
66
67
68
# 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, :expression)
  end
end