2017-02-20 2 views
0

Ich habe ähnliche Antworten zu diesem here und here gefunden, aber es scheint nicht zu funktionieren.Aktuellen Benutzer in Sitzung für Tests zuweisen

Ich habe Probleme beim Zuweisen der current_user zu der Sitzung beim Testen. Meine Tests sind auf ähnliche

setup do 
    %User{ 
    id: 123456, 
    name: "MyName", 
    email: "[email protected]", 
    password_hash: Comeonin.Bcrypt.hashpwsalt("password") 
    } |> Repo.insert 

{:ok, user: Repo.get(User, 123456) } 
end 

und mein Test ist

test "renders index.html on /coping-strategy", %{user: user} do 
    conn = conn 
     |> assign(:current_user, user) 
     |> get(coping_strategy_path(conn, :index)) 
    assert html_response(conn, 200) =~ "Coping strategies" 
end 

Als ich das Kommando hier inspizieren, current_user-user korrekt zugewiesen wurde. Wenn ich jedoch die Verbindung in meinem Controller während des Testens überprüfe, ist current_user immer nil. Ich habe auch versucht, build_conn, aber es ist immer noch Null. Hier

ist die Steuerung:

def index(conn, _params) do 
    user_id = conn.assigns.current_user.id 
    coping_strategies = Post 
         |> Post.get_coping_strategies(user_id) 
         |> Repo.all 
    render conn, "index.html", coping_strategies: coping_strategies 
end 

Wenn ich versuche, etwas anderes als current_user zuweisen, dann zeigt sich, wenn ich das Kommando in der Steuerung prüfen. Also, wenn ich im Test |> assign(:stuff, "test") hinzugefügt habe, dann habe ich stuff: "test" im conn zugewiesen. Wenn ich current_user zu current_user2 im Test und im Controller ändere, funktioniert es, weil current_user2 aktualisiert und weitergegeben wird, wie ich es erwarte.

Gibt es einen Grund, dass ich den aktuellen Benutzer nicht so zuweisen kann und warum es immer Null ist? Gibt es irgendwelche Schritte, die ich gerade für current_user vermeide?

bearbeiten

Hier, wo current_user

in dem Auth-Stecker gesetzt wird
def call(conn, repo) do 
    user_id = get_session(conn, :user_id) 
    user = user_id && repo.get(Healthlocker.User, user_id) 
    assign(conn, :current_user, user) 
end 
+0

Können Sie den Code posten, der 'current_user' in Ihrer App zuweist (Authentifizierungsstecker?)? Sie setzen es wahrscheinlich auf "Null", auch wenn es bereits eingestellt ist. – Dogbert

+0

@Dogbert das sieht so aus. Benutzer ist "nil", wenn ich die Tests durchführe. – Katherine

Antwort

2

Da Sie direkt :current_user in assigns in den Tests einstellen, müssen Sie den Benutzer aus dem Abrufen überspringen Sitzung :user_id, wenn assigns enthält :current_user im Auth-Stecker:

def call(conn, repo) do 
    if conn.assigns[:current_user] do 
    conn 
    else 
    user_id = get_session(conn, :user_id) 
    user = user_id && repo.get(Healthlocker.User, user_id) 
    assign(conn, :current_user, user) 
    end 
end 
Verwandte Themen