Сбой вызовов Lager во время тестовых прогонов Common Test
Я решил настроить лагер в своем проекте Erlang. Я использую erlang.mk, поэтому я добавил
ERLC_OPTS = +'{parse_transform, lager_transform}'
на мой Makefile. я могу бежать make all
и скомпилировать модули без ошибок. Я также могу начать erl
Консоль и запустите приложение, содержащее модули, используя лагер. Ошибки не генерируются, и лагер регистрирует сообщения во время сеанса консоли. Кажется, что все в порядке (это первый раз, когда я использовал лагер). Но когда я запускаю Common Test, вызовы лагера не выполняются:
10:11:17.174 [error] CRASH REPORT Process <0.238.0> with 2 neighbours exited with reason: call to undefined function lager:info("Params: ~p", [[]]) in gen_server:init_it/6 line 328
Так как кажется, что модули, которые я тестирую, были скомпилированы правильно, я предполагаю, что это проблема с отсутствующим модулем лагера. Однако, если я добавлю это:
erlang:display(lager:module_info()),
выше первого вызова лагера это успешно, печатая информацию модуля для лагера. Я предполагаю, что звонки регистрации, которые я делаю, используют некоторое волшебство преобразования преобразования, чтобы работать, и это не присутствует во время моих пробегов Общего теста.
Любые предложения с благодарностью!
2 ответа
Оказывается, у меня была ошибка в моем Makefile, но я много узнал о erlang.mk в процессе. erlang.mk искал переменную с другим именем.
Я изначально это в моем Makefile:
ERLC_OPTS = +'{parse_transform, lager_transform}'
Но erlang.mk не использует ERLC_OPTS для компиляции модулей перед их тестированием. Он всегда перекомпилируется перед пакетами Common Test. Для того чтобы модули скомпилировались с преобразованием parse для тестирования, мне нужно было сделать это:
# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'
# Use the same settings for compiling releases as well as for testing
ERLC_OPTS= $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS= $(ERLC_COMPILE_OPTS)
Это гарантирует, что исходный код приложения будет скомпилирован с точно такими же настройками во время тестирования.
Это небольшое преобразование ответа Stratus3D, которое не скрывает значения erlang.mk для ERLC_OPTS и TEST_ERLC_OPTS, но добавляет к ним:
# this must be first
include erlang.mk
# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'
# Append these settings
ERLC_OPTS += $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS += $(ERLC_COMPILE_OPTS)