Mock http request using Tesla.Mock

Hi everyone!

I would like to test some endpoints that make a request API call (particularly to google oauth API and to its /tokeninfo endpoint) and I wonder how can I mock that intern call to avoid execution during test and if is a good idea using Tesla.Mock. Im not sure how to intercept the real call to mock it.

Thank you folks!

A better approach is to use Mox. In config/test.exs:

config :tesla, adapter: Tesla.MockAdapter

Then define the mock in test_helper.exs:

Mox.defmock(Tesla.MockAdapter, for: Tesla.Adapter)

And then mock it in test:

defmodule ​MyTest do
  use ExUnit.Case, async: true

  test "some test" do
    Mox.expect(Tesla.MockAdapter, :call, fn env, _opts ->
      # return {:ok, modified_env}
    end)

    # some code that makes an HTTP request
  end
end
3 Likes

I can’t speak toward Tesla.Mock, but I can second Mox and the “Roll Your Own” strategy Sophie DeBenedetto describes here.

.

1 Like