Awlexus
"(Tesla.Mock.Error) There is no mock set for process" despite defining a mock
Hi, I’m getting the following error message in my tests, and I’m not sure where they come from. I can’t see any difference to Tesla.Mock — tesla v1.20.0, except for async: true, but setting that to false doesn’t change anything.
I have other tests in the same project that also use Tesla.Mock, which don’t have this problem, and I couldn’t find a difference there either. Mocking works when I use mock_global and async: false, but that breaks a lot of other testcases, so that’s not an option.
I have 2 tests that fail because of this. They both reference the same process #PID<0.902.0> in the error message
Any help would be appreciated. Thanks
above_mock: #PID<0.914.0>
above_post: #PID<0.914.0>
1) test ... (...)
test/my_app/redacted_test.exs:292
** (Tesla.Mock.Error) There is no mock set for process #PID<0.902.0>.
Use Tesla.Mock.mock/1 to mock HTTP requests.
See https://github.com/teamon/tesla#testing
stacktrace:
(tesla 1.8.0) lib/tesla/mock.ex:206: Tesla.Mock.call/2
(tesla 1.8.0) lib/tesla/middleware/timeout.ex:59: anonymous fn/1 in Tesla.Middleware.Timeout.safe_async/2
(elixir 1.15.7) lib/task/supervised.ex:101: Task.Supervised.invoke_mfa/2
(elixir 1.15.7) lib/task/supervised.ex:36: Task.Supervised.reply/4
# config
config :tesla, adapter: Tesla.Mock
# Test file
def MyApp.RedactedTest do
use MyApp.DataCase, async: true
import Tesla.Mock
setup :general_setup
describe "describe" do
test "..." do
IO.inspect(self(), label: :above_mock)
mock(fn _ -> json(%{translations: []}) end)
call_tesla_deep_in_this_function()
end
end
end
# Implementation
defmodule MyApp.Client do
def client(opts) do
middlewares = [...]
Tesla.client(middlewares)
end
def call_service(client, body) do
IO.inspect(self(), label: :above_post)
Tesla.post(client, "path", body)
end
end
# call_service is called like this
client = Client.client([...])
body = "body here"
Client.call_service(client, body)
Most Liked
JohnnyCurran
Is the code under test performing the http request from a Task or from a GenServer? Those process pids will not have the Tesla mocked call available to them.
I have solved this with a combo of mock_global and async: false in the test file. This means it doesn’t step on my async tests. You will need to use both mock_global and async: false on each test file where this error appears if you are unable (or don’t want to due to requirements) refactor the http call to happen in a different process
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










