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 wirddef 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
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
@Dogbert das sieht so aus. Benutzer ist "nil", wenn ich die Tests durchführe. – Katherine