I’ve been working with a function that looks similar to the one that I’ve described below. It works adequately in practice but trying to unit test it has been a challenge to this point.
lib/my_module.ex
defmodule MyApp.MyModule do
def my_func do
"my-s3-bucket"
|> ExAws.S3.list_objects_v2(prefix: "path/to/files")
|> ExAws.stream!()
|> Enum.map(&do_work/1)
end
end
I’ve currently set up ExAws like the code samples below for mocking out ExAws.request!
calls.
config/test.exs
config :my_app, :ex_aws,
http_client: ExAws.Request.HttpMock
test/support/mocks.ex
Mox.defmock(ExAws.Request.HttpMock, for: ExAws.Request.HttpClient)
If anyone has suggestions for how to make the Mox.expect/4
call here properly set up the ExAws.stream!
call, that would be greatly appreciated.
test/my_module_test.exs
defmodule MyApp.MyModuleTest do
use ExUnit.Case, async: true
import Mox
setup :verify_on_exit!
describe "my_func/0" do
test "mocks api call(s)" do
# how do we mock the stream?
expect(ExAws.Request.HttpMock, ..., fn ..., ... ->
# unsure
end)
assert [_ | _] = my_func()
end
end
end