我正在尝试创建一个测试助手来测试使用Maru Framework的应用。这是我想要实现的简化版本:
git commit
问题在于git commit
和git commit
功能。 defmodule App.ExtendedMaru do
@moduledoc false
defmacro __using__(opts) do
quote do
use Maru.Test, unquote(opts)
end
end
def post_body(url, body) do
build_conn()
|> Plug.Conn.put_req_header("content-type", "application/json")
|> put_body_or_params(Poison.encode! body)
|> post(url)
end
end
中定义了build_conn/0
,因此可以在此模块中与post/2
联系。
但是,build_conn/0
是一个私人函数defined inside the __using__
macro for Maru.Test
。因此,它存在于使用此模块的模块中,但Maru.Test
无法使用它。我不能只在import Maru.Test
这里,因为我需要通过选择而没有办法这样做。
是否可以访问应该在包含此功能的模块中定义的post/2
函数?
编辑:代码如何结束:
post_body/2
答案 0 :(得分:0)
你的问题来自两个不同的事情:
post_body
方法是私有的,因此您无法在Module
之外调用它。
post_body
方法不在__using__
宏中,因此use
的任何其他模块都无法使用它。
有两个简单的解决方案:
将post_body
方法移到__using__
宏内。执行此操作后,use
的所有模块都可以调用post_body
,但原始模块除外。
(或)将post_body
方法公开,并在__using__
内调用defdelegate
。通过这种方式,您可以在包括原始模块在内的所有模块中调用它。