Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何在Phoenix测试中创建会话?_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 如何在Phoenix测试中创建会话?

Elixir 如何在Phoenix测试中创建会话?,elixir,phoenix-framework,Elixir,Phoenix Framework,我们尝试了多种方法,所有这些方法都产生了不同的错误,幸运的是我现在不记得了。直到最近我们需要一个真正的会话时,我们才能够通过和朋友使用旁路 这就是我根据插件测试得出的结论: 从这里复制粘贴Plug.ProcessStore的位置 有没有更方便/直接的方法 我尝试让集成测试模拟API的真正消费者。真正的API使用者没有访问原始会话的权限,因此您的测试也不应该访问原始会话 如果您有一个端点用于设置具有API密钥的会话,则类似的操作可能会起作用: defmodule MyIntegrationTest

我们尝试了多种方法,所有这些方法都产生了不同的错误,幸运的是我现在不记得了。直到最近我们需要一个真正的会话时,我们才能够通过和朋友使用旁路

这就是我根据插件测试得出的结论:

从这里复制粘贴Plug.ProcessStore的位置


有没有更方便/直接的方法

我尝试让集成测试模拟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