Sha256: e27e4e5091fb608aa305e2c285af99ab2781fdb4afff1d8664528fd79455719b

Contents?: true

Size: 1.85 KB

Versions: 4

Compression:

Stored size: 1.85 KB

Contents

RSpec.describe RuboCop::Cop::RSpec::InstanceVariable do
  subject(:cop) { described_class.new }

  it 'finds an instance variable inside a describe' do
    expect_violation(<<-RUBY)
      describe MyClass do
        before { @foo = [] }
        it { expect(@foo).to be_empty }
                    ^^^^ Use `let` instead of an instance variable.
      end
    RUBY
  end

  it 'ignores non-spec blocks' do
    expect_no_violations(<<-RUBY)
      not_rspec do
        before { @foo = [] }
        it { expect(@foo).to be_empty }
      end
    RUBY
  end

  it 'finds an instance variable inside a shared example' do
    expect_violation(<<-RUBY)
      shared_examples 'shared example' do
        it { expect(@foo).to be_empty }
                    ^^^^ Use `let` instead of an instance variable.
      end
    RUBY
  end

  it 'ignores an instance variable without describe' do
    expect_no_violations(<<-RUBY)
      @foo = []
      @foo.empty?
    RUBY
  end

  # Regression test for nevir/rubocop-rspec#115
  it 'ignores instance variables outside of specs' do
    expect_no_violations(<<-RUBY, filename: 'lib/source_code.rb')
      feature do
        @foo = bar

        @foo
      end
    RUBY
  end

  context 'when configured with AssignmentOnly', :config do
    subject(:cop) { described_class.new(config) }

    let(:cop_config) do
      { 'AssignmentOnly' => true }
    end

    it 'flags an instance variable when it is also assigned' do
      expect_violation(<<-RUBY)
        describe MyClass do
          before { @foo = [] }
          it { expect(@foo).to be_empty }
                      ^^^^ Use `let` instead of an instance variable.
        end
      RUBY
    end

    it 'ignores an instance variable when it is not assigned' do
      expect_no_violations(<<-RUBY)
        describe MyClass do
          it { expect(@foo).to be_empty }
        end
      RUBY
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rubocop-rspec-1.15.1 spec/rubocop/cop/rspec/instance_variable_spec.rb
rubocop-rspec-1.15.0 spec/rubocop/cop/rspec/instance_variable_spec.rb
rubocop-rspec-1.14.0 spec/rubocop/cop/rspec/instance_variable_spec.rb
rubocop-rspec-1.13.0 spec/rubocop/cop/rspec/instance_variable_spec.rb