Hello,
My application consists of a couple of gen servers that all keep some sort of state:
- EntranceHandler: Polls an endpoint every x seconds and stores the result in an ets table, it’s supervised so when it crashes the ownership of the table is transfered to the new started child.
- Settings: Small genserver that keeps configuration in an ets table
For my unit tests I could easily start an EntranceHandler
genserver with the context.test
as name and inject it in the different places but for my controller specs and integration specs this is not possible. By default the GenServers register themself under the __MODULE__
name if no name is given. I also have different mocks (Agents with same behaviour implemented) when I need a dependent Genserver. Those mock agents also register themself as name __MODULE__
.
Different controllers interact with Settings
redirect back to the configuration page if the Settings
are not configured
yet. When running the specs async / concurrently this means that one spec might clear the Settings mock while another one just asserts that the settings are valid. This results in a lot of random failures.
My question is how can I test different controllers correctly in isolation?