Elixir - 在doctest中使用变量

问题描述 投票:1回答:1

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

testing elixir doctest
1个回答
1
投票

问题是你的预期结果中的[pid]线。预期结果应该是精确值,而不是变量。您无法从预期结果中引用变量。您可以通过检查上一行中的pid来解决它:

iex> {:ok, pid} = MainProcess.create_process()
iex> [pid] === MainProcess.get_processes()
true
© www.soinside.com 2019 - 2024. All rights reserved.