Elixir 如何在Phoenix测试中创建会话?
我们尝试了多种方法,所有这些方法都产生了不同的错误,幸运的是我现在不记得了。直到最近我们需要一个真正的会话时,我们才能够通过和朋友使用旁路 这就是我根据插件测试得出的结论: 从这里复制粘贴Plug.ProcessStore的位置Elixir 如何在Phoenix测试中创建会话?,elixir,phoenix-framework,Elixir,Phoenix Framework,我们尝试了多种方法,所有这些方法都产生了不同的错误,幸运的是我现在不记得了。直到最近我们需要一个真正的会话时,我们才能够通过和朋友使用旁路 这就是我根据插件测试得出的结论: 从这里复制粘贴Plug.ProcessStore的位置 有没有更方便/直接的方法 我尝试让集成测试模拟API的真正消费者。真正的API使用者没有访问原始会话的权限,因此您的测试也不应该访问原始会话 如果您有一个端点用于设置具有API密钥的会话,则类似的操作可能会起作用: defmodule MyIntegrationTest
有没有更方便/直接的方法 我尝试让集成测试模拟API的真正消费者。真正的API使用者没有访问原始会话的权限,因此您的测试也不应该访问原始会话 如果您有一个端点用于设置具有API密钥的会话,则类似的操作可能会起作用:
defmodule MyIntegrationTest do
setup %{conn: conn} do
{:ok, conn: sign_in(conn, "TEST_API_KEY")}
end
test "Session is authenticated", %{conn: conn} do
conn = get(conn, some_protected_path(conn))
assert conn.status == 200
end
def sign_in(conn, api_key) do
# You can make changes to conn.session in the controller action for
# sign_in_path and those changes will be reflected on the conn returned here.
post(conn, sign_in_path(conn, :create), %{api_key: api_key}})
end
end
恐怕API端点不会受到该问题的影响,因为不涉及cookies机制。我们确实有验收测试作为测试套件的一部分。我认为这是最短的版本。如果使用conn而不是build_conn,您可能会忽略回收。另外,分配conn是一个很好的解决方案:当前用户,避免会话检查的用户您可能知道这一点,但以防万一
defmodule MyIntegrationTest do
setup %{conn: conn} do
{:ok, conn: sign_in(conn, "TEST_API_KEY")}
end
test "Session is authenticated", %{conn: conn} do
conn = get(conn, some_protected_path(conn))
assert conn.status == 200
end
def sign_in(conn, api_key) do
# You can make changes to conn.session in the controller action for
# sign_in_path and those changes will be reflected on the conn returned here.
post(conn, sign_in_path(conn, :create), %{api_key: api_key}})
end
end