小编Dmi*_*try的帖子

在测试时撬

我是Elixir的新手,但它有很多乐趣!

我来自Ruby世界,所以开始看起来比喻.并且存在调试工具pry.使用binding.pry我可以中断任何会话.我在Elixir找到了类似的东西 - IEx.pry.但是当我通过测试时,它不起作用ExUnit.

问题 - 是否可以中断测试会话并使用当前环境运行iex?

testing elixir iex

51
推荐指数
2
解决办法
5332
查看次数

如何通过注册孩子获取注册的密钥(pid)

我想使用Registry模块来注册动态创建的子进程。所以我将注册表添加到我的主管树中:

def init([]) do
  children = [
    supervisor(Registry, [:unique, :my_registry]),
    supervisor(MyManager, []),
    # ...
  ]
  opts = [strategy: :one_for_one, name: MySupervisor]
  supervise(children, opts)
end
Run Code Online (Sandbox Code Playgroud)

孩子的注册是这样发生的:

def start_link(%{id: id}) do
  GenServer.start_link(__MODULE__, [], name: {:via, Registry, {:my_registry, id}})
end
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是 – 如何在我的注册表中获取所有键(子 pid)。我尝试使用Registry.keys\2,但没有成功。

def get_registry_pid do
  Supervisor.which_children(MySupervisor)
  |> Enum.filter(fn {id, _, _, _} -> id == Registry end)
  |> List.first
  |> elem(1) # get a Regisry pid from a tuple {id, pid, type, modules}
end
Registry.keys(:my_registry, get_registry_pid()) # …
Run Code Online (Sandbox Code Playgroud)

elixir

7
推荐指数
1
解决办法
1054
查看次数

标签 统计

elixir ×2

iex ×1

testing ×1