Rebar eunit пропускает все тесты приложения, если корневое приложение не включено

Моя проблема в том, что я не могу запустить тесты 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

Когда я включаю приложение root, оно работает:

$ rebar eunit skip_deps=true apps=rootapp,app1

Несмотря на то, что я действительно хочу проверить app1не rootappэто действительно неудобно, так как SublimeErl Плагин для SublimeText 2 всегда будет устанавливать приложения для приложения, в котором содержится тестируемый модуль. Таким образом, тесты всегда будут неудачными, потому что на самом деле тесты вообще не будут выполняться.

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

1 ответ

Решение

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

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

Вы также можете включить apps каталог в ваш путь к lib:

{lib_dirs, ["apps"]}.

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

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

rebar skip_deps=true eunit 

который будет запускать все тесты eunit приложений в apps,

Другие вопросы по тегам