#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
переменную?
Я думаю, что мне, возможно, придется написать для этого специальный полицейский, но интересно, есть ли известный существующий способ сделать это?
Спасибо.