【问题标题】:Elixir - Starting Agent to testElixir - 启动代理进行测试
【发布时间】:2017-05-26 13:32:31
【问题描述】:

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

setup_all do
  Module.start_link()
end

也许我需要传递其他东西或者只是用主管初始化它?

编辑:

之前和supervisor一起工作的代码只是一个简单的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

【问题讨论】:

  • 您可以发布正在工作的主管代码吗?你模块的start_link 的代码是什么?这个setup_all 代码是工作还是抛出错误?如果代理关闭,为什么会收到 403 错误?如果您询问已关闭的代理的状态,代码应该会抛出错误。
  • @Dogbert 我更新了这个问题。不知何故,我不再收到 403 了……setup_all 回调和以前一样。
  • 尝试从setup_all返回:ok。您当前正在返回一个 PID。只需在Module.start_link() 行后添加:ok
  • @Dogbert 哦,是的...就是这样,它完全超出了我的想象,我没有仔细阅读错误消息...感谢您的帮助。

标签: elixir


【解决方案1】:

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

setup_all do
  Module.start_link()
  :ok
end

您可能想要断言代理已成功启动,在这种情况下您可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2016-05-16
    • 2016-01-23
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多