Ich habe Guardian.Plug.EnsureAuthenticated
in meiner Router-Pipeline. Wie führe ich es während der Controller-Tests durch?stub Guardian.Plug.EnsureAuthenticated für Phoenix Controller testen
Antwort
Ich habe meine Phoenix Authorized Controller Tests bestanden. Hier ist meine Lösung:
Test/controllers/inbox_controller_test.exs:
defmodule MyApp.InboxControllerTest do
use MyApp.ConnCase
alias MyApp.User
setup do
user = %User{id: "a1234"}
{:ok, jwt, full_claims} = Guardian.encode_and_sign(user)
{:ok, %{user: user, jwt: jwt, claims: full_claims}}
end
test "lists all entries on index", %{jwt: jwt} do
conn = conn()
|> put_req_header("authorization", "Bearer #{jwt}")
|> get(inbox_path(conn, :index))
assert json_response(conn, 200)["inboxes"] == []
end
end
config/test.exs:
config :guardian, Guardian,
serializer: MyApp.TestGuardianSerializer
Test/support/test_guardian_serializer.ex:
defmodule MyApp.TestGuardianSerializer do
@behaviour Guardian.Serializer
alias MyApp.User
def for_token(user = %User{}), do: { :ok, "User:#{user.id}" }
def for_token(_), do: { :error, "Unknown resource type" }
def from_token("User:" <> id) do
{:ok, %User{id: id, login: "admin"}}
end
def from_token(_), do: { :error, "Unknown resource type" }
end
Ich löste dies, indem ich ein Test-Tag erstellte, das den Benutzer mit Guardians sign_in
-Methode erstellt und protokolliert (verwenden Sie api_sign_in
wenn Guardian 0.14.x). Dann können Sie es auf die Tests anwenden, die einen angemeldeten Benutzer benötigen, etwa so:
setup %{conn: conn} = config do
cond do
config[:login] ->
user = insert_user()
signed_conn = Guardian.Plug.sign_in(conn, user)
{:ok, conn: signed_conn}
true ->
:ok
end
end
@tag :login
test "shows page only when logged in", %{conn: conn} do
conn = get(conn, some_page_path(conn, :index))
assert html_response(conn, 200)
end
Wenn Sie den Benutzer brauchen Sie nur für eine Behauptung erstellt haben, können Sie es zusammen mit der Verbindung übergeben:
config[:login] ->
user = insert_user()
signed_conn = Guardian.Plug.sign_in(conn, user)
{:ok, conn: signed_conn, user: user}
und Muster passen es im Test:
@tag :login
test "shows page only when logged in", %{conn: conn, user: user} do
# ...
end
Betrachten sie die insert_user
Logik zu einem Block setup_all
bewegenden Datenbankoperationen zu reduzieren und die t beschleunigen .
Das gibt mir nur einen Fehler von 'Funktion Guardian.Plug.api_sign_in/2 ist undefined (Modul Users.Guardian.Plug ist nicht verfügbar)'. Sind Sie sicher, dass diese Funktion existiert? – Sebastialonso
@Sebastialonso Ja, wenn Sie zu Guardian 0.14.x wechseln. Es wurde möglicherweise in Guardian 1.x entfernt oder umbenannt, was wahrscheinlich das ist, was Sie verwenden. – Svilen
- 1. Erschreckend redundante Phoenix-Controller
- 2. Phoenix Controller - Singular oder Plural?
- 3. Phoenix - Controller mit mehreren Rendern
- 4. Testen eines Datei-Uploads in Phoenix/Elixir
- 5. Wie Rspec Für Controller testen,
- 6. Stub eine Instanz Variable innerhalb Controller
- 7. sinon stub für window.location.search
- 8. Wie Controller Controller-Anweisung testen?
- 9. Testen einer API Anruf mit Elixir/Phoenix
- 10. Guardian und Sessions in Phoenix App
- 11. Rspec, Testen für Update-Controller funktioniert nicht?
- 12. neuen Controller nicht in Phoenix-Elixier arbeiten?
- 13. current_user in Phoenix Controller per Plug geben
- 14. Nested Controller-Aktionen Testen
- 15. Schienen - Rspec - Stub Parameter
- 16. Volltextsuche für Phoenix Framework
- 17. Stub any_instance mit Minitest
- 18. Rspec Stub funktioniert nicht
- 19. Jasmin-Controller testen, erwartet Spion
- 20. RSpec Controller testen - blank response.body
- 21. Wie verspotten/Stub ruft Nachricht taglib in Grails Controller
- 22. Apache Phoenix API für PHP
- 23. Wie benutzt man eine Phoenix Controller Variable in JavaScript?
- 24. Phoenix Controller testet auf Eindeutigkeit, die nicht funktioniert
- 25. externalizing junit Stub Objekte
- 26. Rspec - Stub-Modul Methode
- 27. Grails - Wie Instanziieren Service in Controller beim Controller testen
- 28. RSpec: Stub private Methode
- 29. Nachbearbeitung der Controller-Antwort mit einem Stecker in Phoenix
- 30. Elixier Phoenix wo sollte man globale Controller Helfer setzen
Wow, danke @arkadiy das hat mir wirklich geholfen. –