我的问题是我无法在不包含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
中为一个应用程序运行测试而不包括根应用程序?
答案 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测试。