Erlang EUnit测试模块依赖于库应用程序

dan*_*ain 6 erlang rebar eunit

我有一个中等版本的应用程序.我最近在发布版本的库应用程序中重构了一些常用功能.这使得我的EUnit测试undef在测试需要库应用程序的任何内容时都会失败.

设置是这样的:

% In apps/utils/src/utils.erl
-module(utils).

-export([foo/0]).

foo() -> "OH HAI".
Run Code Online (Sandbox Code Playgroud)

然后

% In apps/some_app/src/some_app.erl
-module(some_app).

-export([bar/0]).

bar() -> io:format("foo: ~s~n", [utils:foo()]).

% unit tests for bar()
Run Code Online (Sandbox Code Playgroud)

然后单元测试some_app:bar()失败.我正在运行它们rebar eunit skip_deps=true.我正在使用,skip_deps=true因为我的版本使用了一些第三方应用程序(SQL等).

我假设测试开始失败,因为EUnit正在调用没有依赖项的测试中的应用程序?有没有什么办法解决这一问题?我已将.app文件配置为显式声明依赖项.它在发布时运行良好,现在已经部署了大约一天没有问题,但如果我能让测试再次通过,我会感觉好多了:)

(我可以使用一个模拟应用程序来存根utils:foo/0,我可以看到那个特定的理想位置,但在这种情况下看起来有点过分,因为utils:foo/0(读:它是现实世界的对应物)做了一些非常简单的事情.)

dan*_*ain 2

我能够通过这样做来使其发挥作用rebar compile eunit skip_deps=true

关键是compile里面有它,我不知道为什么。我猜测编译步骤会将所有模块放入内存中。我很想听到一个好的解释。