Chefspec повторно загружает библиотеки и выдает предупреждение об уже инициализированной константе CONSTANT

У меня есть кулинарная книга шеф-повара с библиотекой, например. library.rb. Он содержит CONSTANT:

CONSTANT = 'constant'

Когда я пишу модульные тесты для этой поваренной книги, она всегда выдает мне предупреждение:

(Some prefix...)warning: already initialized constant CONSTANT
(Some prefix...)warning: previous definition of CONSTANT was here

Предупреждения появляются неоднократно, столько раз, сколько примеров (тестовых случаев) минус один. Я думаю, это потому, что chefspec загружает библиотеки один раз для каждого примера. Может ли кто-нибудь сказать мне, как заставить библиотеки загружаться только один раз или как отключить предупреждающее сообщение?


person vmcloud    schedule 17.03.2015    source источник
comment
CONSTANT - это константа, а не переменная.   -  person sawa    schedule 17.03.2015


Ответы (1)


В краткосрочной перспективе измените его на:

CONSTANT ||= 'constant'

В долгосрочной перспективе лучше использовать let(), или переместить константу из тестового примера, или выбрать любой другой способ замены константы, или убедиться, что код тестирования загружает библиотеку один раз, а не много раз.

Изменить. Хорошая мысль @sawa в комментариях: если ваша константа nil или false, то подход ||= не останавливает предупреждения, поэтому вам понадобится лучшее решение, например:

CONSTANT = 'constant' unless defined? CONSTANT
person joelparkerhenderson    schedule 17.03.2015
comment
Это будет работать для этого конкретного случая, но сломается, если это значение будет nil или false. Лучше использовать defined? или его аналоги. - person sawa; 17.03.2015