automated-testserlangeunitrebar3

How to setup tests with the appropriate code using rebar3?


I have created a simple application via rebar3 templates such as:

apps/myapp/app/myapp_app.erl

-module(myapp_app).

-behaviour(application).

-export([start/2, stop/1]).

start(_StartType, _Params) ->
    ok.

stop(_State) ->
    ok.

I have written a test for that:

apps/myapp/test/myapp_test.erl

-module(myapp_test).

-include_lib("eunit/include/eunit.hrl").

simple_test() ->
    myapp_app:start(ok, 42).

Sadly, when I launch the test, it seems that the link is not done between the two files:

$ rebar3 eunit
===> Verifying dependencies...
===> Compiling shoreline
===> Performing EUnit tests...
F
Failures:

  1) myapp_test:simple_test/0
     Failure/Error: {error,undef,
                        [{myapp_app,start,"*",[]},
                         {myapp_test,simple_test,0,
                             [{file,
                                  "/.../apps/myapp/test/myapp_test.erl"},
                              {line,8}]},
                         {myapp_test,simple_test,0,[]}]}
     Output:

Finished in 0.074 seconds
1 tests, 1 failures
===> Error running tests

Is there something to add in rebar.config?


Solution

  • If you have .erl files in a custom directory other than 'src', then you need to add it to the code path.

    You can do it using rebar3 by modifying erl_opts section in 'rebar.config' as below.

    {erl_opts, [debug_info, {src_dirs, ["src", "app"]}]}. 
    

    Hope this can work for you.