Elixir-在doctest中使用变量

时间:2019-01-26 08:34:09

标签: testing elixir 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中解决。

1 个答案:

答案 0 :(得分:1)

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

iex> {:ok, pid} = MainProcess.create_process()
iex> [pid] === MainProcess.get_processes()
true