mandarvaze
(UndefinedFunctionError) function HTTPoison.request/5 is undefined (module HTTPoison is not available
I am facing a unique(?) problem.
I have unit tests and integration tests
Both call the same set of functions.
All the integration tests pass (mix test --include integration test/integration/gateways/mercadopago_test.exs)
All the unit tests fail (mix test test/gateways/mercadopago_test.exs)
For every unit test , I get the same error :
** (UndefinedFunctionError) function HTTPoison.request/5 is undefined (module HTTPoison is not available)
Stack trace points to lib/gringotts/gateways/mercadopago.ex:264: Gringotts.Gateways.Mercadopago.commit/5
Searching for module not available points to solutions that do not apply.
Most suggest including httpoison in mix.exs - which was already have (https://github.com/aviabird/gringotts/blob/mercadopago-2020/mix.exs#L40)
Other suggestion is about elixirc_paths - which also taken care of (https://github.com/aviabird/gringotts/blob/mercadopago-2020/mix.exs#L19)
BTW, I’m a n00b at elixir, so I may be overlooking something obvious.
I’ve already asked for helped in local elixir discord channel. No luck.
Thanks for any suggestions/ideas.
Marked As Solved
al2o3cr
All the unit tests start with a similar structure:
with_mock HTTPoison, post: fn _url, _body, _headers ->
that’s mocking the post function on HTTPoison. But the line that’s failing is using a lower-level HTTPoison function:
res = HTTPoison.request(method, url, body, headers,
opts ++ [params: [access_token: opts[:config][:access_token]]])
Under the hood, HTTPoison.post calls HTTPoison.request:
Also note this important detail from the Mock documentation
By default, only the functions being mocked can be accessed from within the test.
Also Liked
benwilson512
So, many versions of Elixir ago, you had to manage the applications list as you are doing here. That is no longer true and will cause issues. I’d remove that line entirely.
Have you tried the simple rm -rf _build and recompile approach?
Also, what version of elixir are you running? elixir --version
mandarvaze
@al2o3cr What you say makes sense. I’m gonna use Bypass instead of Mock
But I’m wondering why do other two test (files) for cams and authorize.net that use similar pattern (and Mock) work ? I confirmed that these two directly use HTTPoison.post inside commit function - hence their with_mock block works.







