D4no0
Mox strange race conditions
I seem to be getting some strange undefined behavior when defining multiple separated mocks for the same module in the same test:
HttpClientMock
|> expect(:request, fn request -> build_response() end)
|> allow(self(), fn -> Process.whereis(MyProcess) end)
# Later in that same test
HttpClientMock
|> expect(:request, fn request -> build_another_response() end)
|> allow(self(), fn -> Process.whereis(MyNewProcess) end)
Is this a limitation that Mox has? I’ve read already the documentation a few times and I couldn’t find any things specified about this, it is completely unclear what happens under the hood as it seems these definitions are doing only side-effects.
Marked As Solved
mudasobwa
Note for the future readers: there was a bug with multiple lazy defined allowances until v1.2.0 which I fixed.
Also Liked
D4no0
I am not sure how I can show an example, what I have are multiple genservers (some of them dependent on each-other) hitting multiple HTTP APIs.
I can confirm that with version 1.1.0, even with the race condition fixed in my application code, the tests still fail randomly as before, I’ve actually upgraded the dependency right in the middle of writing this topic so I might have experienced that bug too before upgrading. I did not mention it, because I didn’t saw bugfixes mentioned in changelogs of the new version. Thanks for the fix!
mudasobwa
Well, technically I brought this bug and then I fixed it.
The deferred allowance is my idea and my implementation, probably that is why it was buggy in the first place ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








