2017-05-25 58 views
0

我正在測試一個端點到一個ReST Api,並且我將這個API密鑰存儲在一個代理上,然後我繼續從中獲取密鑰,我首先將該代理添加到監督樹並且它的工作,但現在我刪除它,因爲我希望人們使用這個代碼,我希望他們自行監督代理人(如果它不應該是這樣的,讓我知道),現在我想測試端點我得到一個403狀態代碼,顯然告訴我,它不是從代理中選擇api密鑰,我使用ExUnit,並試圖使用setup_all回調,但我得到了同樣的錯誤。我沒有通過上下文或什麼,因爲我說如何,我從代理狀態獲得密鑰。我用setup_all回調如下:Elixir - 要測試的起始代理

setup_all do 
    Module.start_link() 
end 

也許我需要別的東西傳遞或只是與主管初始化呢?

編輯:

這是與上司的工作之前,只是一個簡單的管理者代碼:

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 
+0

你能發佈正在工作的主管代碼嗎?和你的模塊的'start_link'代碼?而這個'setup_all'的代碼工作或拋出一個錯誤?如果代理商關閉,你爲什麼會得到403錯誤?如果您要求代理處於關閉狀態,代碼應該會出錯。 – Dogbert

+0

@Dogbert我更新了這個問題。不知何故,我再也沒有得到403's了......'setup_all'回調和以前一樣。 – Aguxez

+0

嘗試從'setup_all'返回':ok'。您目前正在返回一個PID。只需在'Module.start_link()'行後添加':ok'即可。 – Dogbert

回答

1

ExUnit預計setup_all返回的:ok一個,一個關鍵字列表或地圖。該值與所有其他setup_allsetup塊的返回值合併,並作爲上下文傳遞給每個測試。如果你不希望任何補充的情況下,你可以添加一個:okModule.start_link()行之後:

setup_all do 
    Module.start_link() 
    :ok 
end 

您可能要斷言代理成功啓動,在這種情況下,你可以這樣做:

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