xgeek116
Mox is ignoring my Mocked module and calling the real function
I’m using using mox to help me with my unit testing (for now, I want to mock a function that fetches external API).
my mix.exs :
{:mox, "~> 1.0", only: :test}
My test_helper.exs :
ExUnit.start()
Mox.defmock(MyApp.MockExternalSources, for: MyApp.MyModule.ExternalSources)
My module code (MyApp.MyModule.ExternalSources) :
defmodule MyApp.MyModule.ExternalSources do
@callback http_get_resource(url :: String.t(), headers :: list()) :: {:ok, map()} | :error
@callback fetch_one_external_resource(params :: map()) :: map()
require Logger
def fetch_one_external_resource(params) do
with {:ok, data} <-
http_get_resource(params["url"], params["headers"]) do
do_something(data)
else
:error -> %{}
end
end
def http_get_resource(url, headers) do
case HTTPoison.get(url, headers) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, Poison.decode!(body)}
{:ok, %HTTPoison.Response{status_code: 404}} ->
:error
{:error, %HTTPoison.Error{reason: _reason}} ->
:error
end
end
end
And my test module :
defmodule MyApp.MyModule.ExternalSources.Test do
use ExUnit.Case, async: true
import Mox
setup :verify_on_exit!
test "fetch and process external data" do
MyApp.MockExternalSources
|> expect(:http_get_resource, fn _url, _headers ->
{:ok, %{status_code: 200, body: %{key1: "value1", key2: "value2"}}}
end)
params = %{
"url" => "xxx",
"headers" => "yyy"
}
assert MyApp.MyModule.ExternalSources.fetch_one_external_resource(params) ==
%{"new_key1" => "value1", "new_key2" => "value2"}
end
end
But I always get a failed assertion and the behaviour is that the right value (MyApp.MyModule.ExternalSources.fetch_one_external_resource(params)) is actually calling the external API and getting the real values ignoring my static data in the mock (%{key1: "value1", key2: "value2"})
Any help please !
Popular in Questions
Hi there,
I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
Hi all,
Trying to get some more clarity over utc_datetime and naive_datetime for Ecto:
https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
Hi,
is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”:
14:57:30.512 [warn] ...
New
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this
"1000"
What is the ...
New
The Elixir Typespec docs show the following syntax for keyword lists in typespecs:
# ...
| [key: type] # keyword lis...
New
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
I have a User schema with a :from_id field set to type :string:
defmodule TweetBot.Repo.Migrations.CreateUsers do
use Ecto.Migration
...
New
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum.
...
New
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir
iex(2)...
New
Other popular topics
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
15:22:35.803 [error] gen_event {lager_file_backend...
New
In Ruby, I can go:
User.find_by(email: "foobar@email.com").update(email: "hello@email.com")
How can I do something similar in Elixir? ...
New
Good day to you all.
I have been struggling to get a query involving like and ilike to work.
Can anyone assist me on this, please?
pro...
New
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
I tried installing
elixir 1.11.2
erlang 23.3.4
via asdf in my zsh shell. Enabled the versions locally and globally.
When I list them ...
New
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
New
After calling mix ecto.create I get this error:
17:00:32.162 [error] GenServer #PID<0.412.0> terminating
** (Postgrex.Error) FATAL...
New
I will often find my self writing things similar to:
case some_value do
nil -> something()
"" -> something()
_ -> someth...
New
I have a super simple question about elixir - how would I take a file like this
foo bar baz
and output a new file that enumerates th...
New
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New








