在我的应用程序中有一个GenServer,它可以创建其他进程。所有进程ID都保存到列表中。
def create_process do
GenServer.call(__MODULE__, :create_process)
end
def handle_call(:create_process, _from, processes) do
{:ok, pid} = SomeProcess.start_link([])
{:reply, {:ok, pid}, [pid | processes]}
end
还有一个获取PID列表的功能。
def get_processes do
GenServer.call(__MODULE__, :get_processes)
end
def handle_call(:get_processes, _from, processes) do
{:reply, processes, processes}
end
我试着像这样写一个get_processes
函数的doctest:
@doc """
iex> {:ok, pid} = MainProcess.create_process()
iex> MainProcess.get_processes()
[pid]
"""
然而,测试运行器似乎没有看到pid变量,我得到一个undefined function pid/0
错误。我知道它可以通过常规测试简单地解决,但我想知道它可以在doctest中解决。
问题是你的预期结果中的[pid]
线。预期结果应该是精确值,而不是变量。您无法从预期结果中引用变量。您可以通过检查上一行中的pid
来解决它:
iex> {:ok, pid} = MainProcess.create_process()
iex> [pid] === MainProcess.get_processes()
true