on_exit is guaranteed to run *after* the test process finishes.

It is impossible to guarantee that something runs before it exits, due to
links.

On Sat, Nov 12, 2022 at 23:55 Anthony Accomazzo <anth...@sequin.io> wrote:

> Hey all,
>
> As I understand it, the `on_exit/2` callback is *not* guaranteed to
> complete before a test process exits *if the test has a failure*. For
> example, consider this flow:
>
> ```
> 1. Boot a process tree (Supervisor with child processes)
> 2. Register an `on_exit/2` callback to stop the Supervisor
> 3. Make an assertion -- the assertion fails
> ```
>
> Here, the assertion failure will crash the test process before `on_exit/2`
> runs.
>
> Assuming I'm understanding this correctly, let me share a very common pain
> point for our team. A test will fail, and we'll see an output like this:
>
> ```
> ** (Mox.UnexpectedCallError) no expectation defined for MyMock.some_func/0
>
> 1) some failing test
> match (=) failed
> :ok = Module.some_operation()
> ```
>
> The issue is that we get error output *that was actually a result of the
> test pid being torn down before the process tree*. So, it's a red herring.
> There was *another* bug that caused the assertion to fail. In this case,
> the Mox.UnexpectedCallError just happened because the test_pid went DOWN
> while the process tree was still running, and they called a mock registered
> to that test_pid and failed.
>
> However, in certain situations, it's super hard to know if the error
> output is signal or noise.
>
> You can imagine that in the place of a Mox error, we have the same
> situation with database connections, no_procs when we try to send signals
> back to a dead test_pid, etc.
>
> We think it would be ideal to be able to register a callback that will
> always run before a test_pid exits, regardless of if the test ran
> successfully or not.
>
> What do you think? Or what other strategies might we employ?
>
> Thanks,
> Anthony
>
> --
> 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 elixir-lang-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/52c85fb1-6a4e-4646-910f-aeb95ec90efdn%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/52c85fb1-6a4e-4646-910f-aeb95ec90efdn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KQe5iy2_vSviUNo5Eb3Kx1yQfti9EHwEYZLtgevyzsAw%40mail.gmail.com.

Reply via email to