2016-07-01 2 views
1

우리는 다양한 방법을 시도했으며 모두 다 다른 종류의 오류가 발생했습니다. 운 좋게도 나는 지금 기억하지 않습니다. 최근에 우리가 진짜 세션을 필요로 할 때까지 우리는 bypass_through과 친구들을 사용할 수있었습니다.Phoenix 테스트에서 세션을 만드는 방법은 무엇입니까?

내가 Plug 테스트를 내놓고 함께 넣을 수 뭔지 그건 : Plug.ProcessStore 여기 https://github.com/elixir-lang/plug/blob/master/test/test_helper.exs#L6

에서 복사 붙여

def conn_with_session do 
     build_conn 
     |> get("/") 
     |> recycle 
     |> Plug.Session.call(Plug.Session.init(store: Plug.ProcessStore, key: "_app_key")) 
     |> fetch_session 
     end 

가 할 수있는보다 편리/간단한 방법이 있습니까?

+0

을 I가,이 짧은 변형 생각 [이미 답변] (HTTP : //stackoverflow.com/a/31983168/3102718). 'build_conn' 대신에'conn'을 쓰면 아마'recycle'을 생략 할 수 있습니다. 또한 세션 확인을 피하기 위해'assign (conn, : current_user, user)'를 사용하는 것이 좋습니다. –

답변

-1

통합 테스트를 통해 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 
+0

쿠키 메커니즘이 관련되어 있지 않으므로 API 엔드 포인트가이 문제의 영향을받지 않을까 걱정됩니다. . 그리고 우리는 테스트 스위트의 일부로 승인 테스트를하고 있습니다. – lessless

관련 문제