Модуль Rebar пропускает все тесты приложений, если корневое приложение не включено

моя проблема в том, что я не могу запускать тесты eunit для одного приложения или модуля без включения корневого приложения. Схема моего каталога выглядит примерно так:

├── 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 (у меня также есть файл rebar.config в apps/app1.

Однако, если я попытаюсь

$ 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, это действительно неудобно, поскольку плагин SublimeErl для SublimeText 2 всегда будет устанавливать приложения для приложения, в котором содержится тестируемый модуль. Таким образом, тесты всегда будут терпеть неудачу, потому что на самом деле никакие тесты не будут выполняться вообще.

Короче говоря: есть ли что-то, что я могу настроить в любом из файлов rebar.config, чтобы можно было запускать тесты для одного приложения в /apps без включения корневого приложения?


person jaw    schedule 09.03.2014    source источник


Ответы (1)


Лично я предпочитаю помещать основное приложение в отдельную папку, совместимую с OTP, в apps. Просто создайте новое приложение rootapp в apps и включите его в свой rebar.config:

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

Возможно, вам также придется включить каталог apps в ваш путь к библиотеке:

{lib_dirs, ["apps"]}.

Возможно, вы захотите взглянуть на сообщение в блоге Фреда Герберта "Так же плохо, как и все остальное" .

С этой настройкой вы сможете запустить:

rebar skip_deps=true eunit 

который запустит все юнит-тесты приложений в apps.

person Tilman    schedule 11.03.2014
comment
Я думал, что должно быть корневое приложение, но это имеет смысл. И спасибо, что поделились постом Фреда. - person jaw; 11.03.2014