I am creating a resource during test setup based on a test's context (namely, its module and name):
*setup context do prepare_resource_for_test_context(context)end* I would like to be able to teardown this resource upon test conclusion. This is possible today: *setup context do prepare_resource_for_test_context(context)* * on_exit do* * cleanup_resource_for_test_context(context)* * end* *end* *Proposal* However, I would also like to leave the resource in-place on test failure for inspection. (My *prepare_resource* function can handle the situation where a resource already exists on setup. This is opposite to the common tmpdir pattern where the resource cleans itself up automatically upon test conclusion but would have unexpected side effects if already setup.) As far as I know, this is not possible today. I would like to do something like receiving the *ExUnit.state()* <https://ex-unit.hexdocs.pm/ExUnit.html#t:state/0> in the *on_exit* callback: *setup context do prepare_resource_for_test_context(context)* * on_exit state do* *case state do* * {:failed, _} -> :ok* * _ -> cleanup_resource_for_test_context(context)* * end* * end* *end* Are there reasons to not entertain this functionality? Is there another way to accomplish it that doesn't rely on a test formatter to notice *{:test_finished, test}* and do the cleanup at a global level? *Implementation* AFAICT we could enable this usecase trivially by threading *test_or_case.state* into <https://github.com/elixir-lang/elixir/blob/1d599978f7d36ea6896b294b3d26d110212be7ab/lib/ex_unit/lib/ex_unit/runner.ex#L541>*ExUnit.OnExitHandler.run <https://github.com/elixir-lang/elixir/blob/1d599978f7d36ea6896b294b3d26d110212be7ab/lib/ex_unit/lib/ex_unit/runner.ex#L541> *and on to its helper functions. We could retain backwards-compatibility by having *exec_callback(callback, state)* <https://github.com/elixir-lang/elixir/blob/1d599978f7d36ea6896b294b3d26d110212be7ab/lib/ex_unit/lib/ex_unit/on_exit_handler.ex#L139> check the arity of the callback before invoking it. Documentation could describe the optional callback parameter and elaborate that an *on_exit* callback defined in a *setup_all* would have some other behaviour (raise an error, receive *nil* or the case name instead of a state, etc—open to ideas). Are would such an implementation be welcome? -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/elixir-lang-core/a5237410-e4a4-479d-9c29-b4879642419dn%40googlegroups.com.
