Elixir - 启动代理来测试

时间:2017-05-25 04:26:46

标签: elixir

我正在测试端点到ReST Api并且我将api密钥存储在代理上,然后我继续从中获取密钥,我首先将代理添加到监督树,它正在工作但现在我删除了它,因为我希望人们使用这个代码,我希望他们自己监督代理(如果它不应该那样,让我知道),现在我正在尝试测试端点,我得到了一个403状态代码显然告诉我它没有从代理中选择api密钥,我正在使用ExUnit并且我尝试使用setup_all回调但是我得到了相同的错误。我没有传递上下文或者某些东西,因为我说的是,我从代理状态获取密钥。我使用setup_all回调如下:

setup_all do
  Module.start_link()
end

也许我需要传递别的东西或者只是用Supervisor初始化它?

编辑:

之前与主管合作的代码只是一个简单的主管:

import Supervisor.Spec

children = [
  worker(Valvex, [])
]

Supervisor.start_link(children, strategy: :one_for_one) # Obviously this is not the whole module.

模块start_link的代码只是:

  def start_link do
    start_link(Application.get_env(:valvex, :token, System.get_env("STEAM_TOKEN")))
  end

  def start_link(key) do
    Agent.start_link(fn -> key end, name: __MODULE__)
  end

奇怪的是错误代码改变了,我现在没有得到403。我没有触摸任何东西,我现在收到此错误

(RuntimeError) expected ExUnit callback in ValvexTest to return :ok | keyword | map, got #PID<0.207.0> instead

1 个答案:

答案 0 :(得分:1)

ExUnit希望setup_all返回:ok,关键字列表或地图中的一个。此值与所有其他setup_allsetup块的返回值合并,并作为上下文传递给每个测试。如果您不想在上下文中添加任何内容,只需在:ok行之后添加Module.start_link()

setup_all do
  Module.start_link()
  :ok
end

您可能希望断言代理已成功启动,在这种情况下您可以执行以下操作:

setup_all do
  {:ok, _pid} = Module.start_link()
  :ok
end