PropCheck interfering with escript

I have an application which has PropCheck tests. I am now trying to build a command line for this program. However, when I try to run the built escript, I get the following:

16:50:39.136 [info]  Application propcheck exited: exited in: PropCheck.App.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function Mix.Project.config/0 is undefined (module Mix.Project is not available)
            Mix.Project.config()
            (propcheck 1.4.0) lib/mix.ex:11: PropCheck.Mix.counter_example_file/0
            (propcheck 1.4.0) lib/app.ex:51: PropCheck.App.counter_example_file/0
            (propcheck 1.4.0) lib/app.ex:34: PropCheck.App.populate_application_env/0
            (propcheck 1.4.0) lib/app.ex:12: PropCheck.App.start/2
            (kernel 8.0.2) application_master.erl:293: :application_master.start_it_old/4

16:50:39.150 [info]  Application libgraph exited: :stopped

16:50:39.150 [info]  Application proper exited: :stopped

16:50:39.151 [info]  Application iex exited: :stopped
ERROR! Could not start application propcheck: exited in: PropCheck.App.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function Mix.Project.config/0 is undefined (module Mix.Project is not available)
            Mix.Project.config()
            (propcheck 1.4.0) lib/mix.ex:11: PropCheck.Mix.counter_example_file/0
            (propcheck 1.4.0) lib/app.ex:51: PropCheck.App.counter_example_file/0
            (propcheck 1.4.0) lib/app.ex:34: PropCheck.App.populate_application_env/0
            (propcheck 1.4.0) lib/app.ex:12: PropCheck.App.start/2
            (kernel 8.0.2) application_master.erl:293: :application_master.start_it_old/4

Googling around, I tried adding runtime: false to propcheck’s options in my mix.exs. Now the CLI works fine, but mix test won’t work.

== Compilation error in file test/analytic_tableaux_props_test.exs ==
** (exit) exited in: GenServer.call(PropCheck.CounterStrike, {:counter_example, {AnalyticTableauxPropsTest, :"property_a simple formula proves itself", []}}, 5000)
    ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
    (elixir 1.12.2) lib/gen_server.ex:1014: GenServer.call/3
    (propcheck 1.4.0) lib/properties.ex:151: PropCheck.Properties.tag_property/1
    test/analytic_tableaux_props_test.exs:5: (module)
    (stdlib 3.15.2) erl_eval.erl:685: :erl_eval.do_apply/6
    (elixir 1.12.2) lib/kernel/parallel_compiler.ex:428: Kernel.ParallelCompiler.require_file/2
    (elixir 1.12.2) lib/kernel/parallel_compiler.ex:321: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/7

Any help very much appreciated.

Shooting in the dark here, did you try specifying only: [:dev, :test] in mix.exs? IMO you can delete the runtime: false option.

1 Like

Thanks. Unfortunately I already had those settings in the beginning. It was that setting that led to the first error.

Found a solution: if I just put only: [:test] that works. Thanks again.

1 Like

Oh yeah, my mistake. I was thinking about dialyzer and not a testing library. only: [:test] is indeed the right thing to do.

1 Like