class RuboCop::Cop::Highlands::RspecEnvironmentModification

This cop checks how the Rails environment is modified in specs. If an individual method on Rails.env is modified multiple environment related branchs could be run down. Rather than modifying a single path or setting Rails.env in a way that could bleed into other specs, use `stub_env`

@example

# bad

# spec/foo/bar_spec.rb
before(:each) do
  allow(Rails.env).to receive(:production).and_return(true)
end

before(:each) do
  expect(Rails.env).to receive(:production).and_return(true)
end

before(:each) do
  Rails.env = :production
end

# good

# spec/foo/bar_spec.rb do
before(:each) do
  stub_env(:production)
end

Constants

MESSAGE

Public Instance Methods

is_spec_file?(path) click to toggle source
# File lib/rubocop/cop/highlands/rspec_environment_modification.rb, line 52
def is_spec_file?(path)
  path.end_with?('_spec.rb')
end
on_send(node) click to toggle source
# File lib/rubocop/cop/highlands/rspec_environment_modification.rb, line 44
def on_send(node)
  path = node.source_range.source_buffer.name
  return unless is_spec_file?(path)
  if rails_env_assignment(node) || allow_or_expect_rails_env(node) || stub_rails_env(node)
    add_offense(node, message: MESSAGE)
  end
end