2016-07-01 1 views
1

私たちはいろいろな方法を試みましたが、それらのすべてがさまざまな種類のエラーをもたらしました。幸い私は今覚えていません。私たちは、実際にセッションが必要なときまで、bypass_throughと友人たちを使用することができました。私はPlugテストに基づかまとめることができたものだPhoenixテストでセッションを作成するには?

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

Plug.ProcessStoreがここhttps://github.com/elixir-lang/plug/blob/master/test/test_helper.exs#L6

からコピー&ペーストであるところには、それを行うために、より便利に/簡単な方法はありますか?

+0

、そこにあるHTTP([すでに答えます] ://stackoverflow.com/a/31983168/3102718)。 'build_conn'の代わりに' conn'を使うと、おそらく 'recycle'を省略することができます。また、セッションチェックを避けるために 'assign(conn、:current_user、user)'を使うのが良い解決策です(おそらくそれだけでは分かります) –

答えて

-1

私は、あなたのAPIの本当の消費者を模倣して統合テストをしようとしています。実際のAPIコンシューマはrawセッションにアクセスできないため、テストする必要はありません。あなたはエンドポイントがセットアップに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

関連する問題