在公共测试测试运行期间,滞后调用失败



我决定在我的Erlang项目中设置拉格。我正在使用erlang.mk,所以我添加了

ERLC_OPTS = +'{parse_transform, lager_transform}' 

到我的Makefile。我可以运行make all并编译模块而不会出错。我还可以启动erl控制台,并使用lager运行包含模块的应用程序。在控制台会话期间不会生成任何错误,并且拉格会记录消息。似乎一切都很好(这是我第一次用拉格啤酒)。但是,当我运行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()),

在第一个拉格调用之上,它成功,打印拉格的模块信息。我假设我正在进行的日志记录调用使用了一些解析转换魔法来工作,而这在我的Common Test运行过程中并不存在。

非常感谢您的任何建议!

原来我的Makefile中有一个拼写错误,但在这个过程中我学到了很多关于erlang.mk的知识。erlang.mk正在查找具有不同名称的变量。

我最初在我的Makefile中这样做:

ERLC_OPTS = +'{parse_transform, lager_transform}'

但是erlang.mk在测试模块之前不使用ERLC_OPTS来编译模块。它总是在公共测试套件之前重新编译。为了让模块使用解析转换进行编译以进行测试,我需要这样做:

# 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)

最新更新