在我的应用程序中有一个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中解决。
答案 0 :(得分:1)
问题是预期结果中的[pid]
行。预期结果应为精确值,而不是变量。您不能从预期结果中引用变量。您可以通过检查上一行的pid
来解决此问题:
iex> {:ok, pid} = MainProcess.create_process()
iex> [pid] === MainProcess.get_processes()
true