testing - Elixir - 在 doctest 中使用变量

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

最佳答案

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

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

关于testing - Elixir - 在 doctest 中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54376856/

相关文章:

node.js - 测试中的异常行为 : node. js/Mocha

linux - 绕过 dev/urandom|random 进行测试

Elixir Livebook 带有 VIM 快捷方式?

python - Doctest 无法识别 __future__.division

ios - 如何自动加载 subview 进行测试?

testing - rspec 没有收到保存方法

elixir - 在 Elixir 中是否可以发出 http POST 请求将一些数据推送到外部 URL?

elixir - Ecto 中的嵌套预加载

python - Python doctest 是否不需要单元测试?

python - doctest 本地定义的函数