2016-07-01 12 views
1

haben wir eine Vielzahl von Methoden ausprobiert und alle von ihnen ergaben verschiedene Arten von Fehlern, an die ich mich zum Glück nicht mehr erinnern kann. Wir konnten bypass_through und Freunde bis zur letzten Zeit verwenden, als wir eine Sitzung für echt brauchen.Wie erstellt man eine Sitzung in Phoenix Tests?

Das ist, was ich in der Lage war, die zusammen auf Plug Tests stützen zu setzen:

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

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

von hier Kopie kleistert Gibt es eine bequemere/einfache Methode, das zu tun?

+0

Ich denke, dies ist die kürzeste Variante ist, da [bereits beantworten] ist (http : //stackoverflow.com/a/31983168/3102718). Sie können wahrscheinlich "recycle" weglassen, wenn Sie "conn" statt "build_conn" verwenden. Es ist auch eine gute Lösung zu 'assign (conn,: current_user, user)' zu vermeiden Session-Check (Sie wahrscheinlich wissen, aber nur für den Fall) –

Antwort

-1

Ich versuche, Integrationstests einen echten Verbraucher Ihrer API nachzuahmen. Echte API-Konsumenten haben keinen Zugriff auf die Raw-Sitzung, also auch Ihre Tests nicht.

In dem Fall, dass Sie einen Endpunkt zur Einrichtung einer Sitzung mit einem API-Schlüssel verwendet haben, so etwas wie dies funktionieren könnte:

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

Ich fürchte, dass API-Endpunkte sind nicht von diesem Problem betroffen, da Cookie-Mechanismus nicht beteiligt ist . Und wir haben Abnahmetests als Teil unserer Testsuite. – lessless

Verwandte Themen