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