【发布时间】:2019-01-22 19:08:07
【问题描述】:
我有这样的功能
def foo_bar() do
Enum.reduce_while(
image_options,
0,
fn image_option, _foo ->
case image_option["destination"] do
"s3" ->
case response = Upload.upload_on_s3(foo, bar) do
{:ok, _} ->
{:cont, {:ok, "ok"}}
{:error, _} ->
{:halt, response}
end
_ ->
{:cont, {:ok, "todo"}}
end
end
)
end
我想在单元测试中测试 foo_bar。如何模拟Upload.upload_on_s3(foo, bar) 函数?
【问题讨论】:
-
试试这个 -> github.com/jjh42/mock 如果你想创建一个模拟对象或阅读这个 -> blog.plataformatec.com.br/2015/10/mocks-and-explicit-contracts 并采取相应的行动
-
我建议不要使用 Mock。它使用全局名称执行黑魔法,这意味着您 a) 并不真正知道引擎盖下发生了什么(不好),并且 b) 不能再以
async: true运行您的测试(非常糟糕)。下面的答案,注入依赖,更好,没有任何这些缺点。