I think I found one way of working with this based on this post.
First was to make the Broadway :name
option overrideable by using Keyword.get/3
with a default value:
defmodule My.Pipeline do
use Broadway
def start_link(opts) do
Broadway.start_link(__MODULE__,
name: Keyword.get(opts, :name, __MODULE__),
# ... etc ...
)
end
# ...
end
Then I can pass a unique :name
option to my pipeline when I call start_supervised
in my test:
test "start_link with custom options"
{:ok, pid} = start_supervised({My.Pipeline,
[
queue_url: "fake-url",
producer: Broadway.DummyProducer,
# ... etc ...
name: :example
]}
end
and it works equally well when I call start_link/1
directly:
{:ok, pid} = My.Pipeline.start_link(
producer: Broadway.DummyProducer,
queue_url: "fake-url",
name: :something
)
This works and I will probably use this method… the only downside I can see is that the regular built-in process in the application’s supervisor always starts… but we kinda just ignore it. That’s not a problem for my use case, however.
I think the docs for https://hexdocs.pm/ex_unit/master/ExUnit.Callbacks.html?#start_supervised/2 need some updating because they don’t really explain how to work with this common use case… I’m not sure what I did is even the proper way to work with that function… it just feels like a work-around more than anything else. Thoughts?