Question

my problem is that I can't run eunit tests for a single app or module without including the root app. My directory laylout looks a bit like this:

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

Now, what I can do is:

$ rebar eunit skip_deps=true

which runs the tests for all apps. Also, I can do:

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

which runs the tests for app1 (I have a rebar.config in apps/app1 as well.

However, if I try

$ rebar eunit skip_deps=true apps=app1

does...nothing. no output. Trying verbose mode gives me:

$ 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

When I include the root app, it works:

$ rebar eunit skip_deps=true apps=rootapp,app1

Despite the fact, that I actually want to test app1, not rootapp, this is really uncomfortable since the SublimeErl plugin for SublimeText 2 will always set the apps to the app that the module under test is contained in. So the tests will always fail because actually no tests will run at all.

Long story short: Is there something I can configure in any of the rebar.config files to make it possible to run the tests for one app in /apps without including the root app?

Was it helpful?

Solution

Personally I prefer to put the main app into its own OTP compliant folder in apps. Just create a new app rootapp in apps and include it in your rebar.config:

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

You might also have to include the apps directory into your lib path:

{lib_dirs, ["apps"]}.

You might want to have a look into Fred Herbert's blog post “As bad as anything else”.

With this set up you should be able to run:

rebar skip_deps=true eunit 

which will run all eunit tests of the apps in apps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top