Elixir - 在 doctest 中使用变量

Elixir - Using variables in doctest

在我的应用程序中有一个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