如果不包含root应用程序,Rebar eunit会跳过所有应用程序测试

时间:2014-03-09 17:00:58

标签: erlang rebar eunit

我的问题是我无法在不包含root应用程序的情况下为单个应用程序或模块运行eunit测试。我的目录laylout看起来有点像这样:

├── apps
│   ├── app1
│   └── app2
├── deps
│   ├── amqp_client
│   ├── meck
│   ├── rabbit_common
│   └── ranch
├── rebar.config
├── rel
└── src
    ├── rootapp.app.src
    ├── rootapp.erl
    ├── rootapp.erl
    └── rootapp.erl

现在,我能做的是:

$ rebar eunit skip_deps=true

运行所有应用程序的测试。另外,我可以这样做:

$ cd apps/app1/
$ rebar eunit skip_deps=true

运行app1的测试(我在apps / app1中也有一个rebar.config。

但是,如果我尝试

$ rebar eunit skip_deps=true apps=app1

做什么都没有。没有输出。尝试详细模式给了我:

$ rebar -vv eunit skip_deps=true apps=app1
DEBUG: Consult config file "/Users/myuser/Development/erlang/rootapp/rebar.config"
DEBUG: Rebar location: "/usr/local/bin/rebar"
DEBUG: Consult config file "/Users/myuser/Development/erlang/erlactive/src/rootapp.app.src"
DEBUG: Skipping app: rootapp

当我包含根应用时,它可以工作:

$ rebar eunit skip_deps=true apps=rootapp,app1

尽管我确实想要测试app1,而不是rootapp,但这真的很不舒服,因为SublimeText 2的SublimeErl插件会始终将应用设置为应用被测模块包含在。所以测试总是会失败,因为实际上根本没有测试。

长话短说:我是否可以在任何rebar.config文件中配置一些内容,以便在/apps中为一个应用程序运行测试而不包括根应用程序?

1 个答案:

答案 0 :(得分:2)

我个人更喜欢将主应用程序放入apps中自己的OTP兼容文件夹中。只需在rootapp中创建一个新应用apps并将其包含在rebar.config中:

{sub_dirs, ["apps/app1",
            "apps/app2",
            "apps/rootapp"]}.

您可能还必须将apps目录包含在lib路径中:

{lib_dirs, ["apps"]}.

您可能希望了解Fred Herbert的博文“As bad as anything else”

通过此设置,您应该能够运行:

rebar skip_deps=true eunit 

将运行apps中所有应用的eunit测试。