Elixir - Использование переменных в doctest - PullRequest
0 голосов
/ 26 января 2019

В моем приложении есть GenServer, который может создавать другие процессы.Все идентификаторы процессов сохраняются в списке.

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вот так:

@doc """

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

"""

Однако, похоже, что бегущий тест не видит переменную pid, и я получаю ошибку undefined function pid/0.Я знаю, что это может быть просто решено с помощью обычного теста, но я хочу знать, что это можно решить в doctest.

1 Ответ

0 голосов
/ 26 января 2019

Проблема в строке [pid] ожидаемого результата.Ожидаемый результат должен быть точным значением, а не переменной.Вы не можете ссылаться на переменную из ожидаемого результата.Вы можете обойти это, проверив pid в предыдущей строке:

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