С Ruby и RSpec есть ли способ с помощью rubocop запретить объявление констант в глобальной области?

#ruby #unit-testing #rspec #rspec3

Вопрос:

Я работаю над настройкой rubocop набора тестов, который я взял на себя. Набор тестов содержит lib/constants.rb конфигурацию, доступную для набора тестов, и все тесты находятся в spec/* папке. Я настраиваю rubocop его так, чтобы он работал только в соответствии со спецификациями теста ( spec/* ) и игнорировал lib папку.

Я настроился RSpec/LeakyConstantDeclaration rubocop на то, чтобы никто потенциально не переназначал какие-либо глобальные константы. Это правило cop работает для любых спецификаций, написанных подобным образом, и rubocop будет правильно помечено RSpec/LeakyConstantDeclaration в этом файле:

 # spec/some_test_spec.rb
describe 'some test' do
  SOME_CONSTANT = { 'blah' => 'blah' }

  # SOME_CONSTANT used somewhere in here
  it 'tests something' do
     ...
  end
end 
 

Однако недавно я нашел еще несколько тестов, которые также делают это (EEK!):

 # spec/some_other_test_spec.rb
SOME_CONSTANT = { 'blah' => 'blah' }

describe 'some other test' do
  # SOME_CONSTANT used somewhere in here
  it 'tests something else' do
    ...
  end
end
 

Некоторые разработчики начали явно объявлять свои собственные константы в глобальной области, и это также может потенциально повторно назначить константу, созданную в lib/constants.rb .

Поскольку я работаю rubocop только с тестовой папкой spec/* , есть ли способ написать rubocop правило соглашения, которое запрещает константы и рекомендует вместо этого использовать let или local переменную?

Я думаю, что мне, возможно, придется написать для этого специальный полицейский, но интересно, есть ли известный существующий способ сделать это?

Спасибо.