Я боюсь тестировать конечную точку api, которая требует заголовка токена. Идея состоит в том, чтобы протестировать два случая с маркером аутентификации и без него.Проверка проверки токена
У меня появилось следующее рабочее решение, но для меня это несколько неуклюже.
defmodule MyApi.SecretControllerTest do
use MyApi.ConnCase
alias MyApi.{Repo, User, Session}
setup %{conn: conn} do
user = create_user(%{name: "john"})
session = create_session(user)
conn = conn
|> put_req_header("accept", "application/json")
|> put_req_header("authorization", "Bearer " <> session.token)
{:ok, conn: conn}
end
def create_user(%{name: name}) do
User.changeset(%User{}, %{email: "#{name}@gmail.com"})
|> Repo.insert!
end
def create_session(user) do
Session.create_changeset(%Session{user_id: user.id}, %{})
|> Repo.insert!
end
test "returns 401 error when user is not authenticated" do
conn = get build_conn, "/api/secrets"
assert json_response(conn, 401)["error"] != %{}
end
test "renders secret resource when user is authenticated", %{conn: conn} do
conn = get conn, secret_path(conn, :index)
assert json_response(conn, 200)["message"] != %{}
end
end
Добро пожаловать в StackOverflow! Ваш код, похоже, работает так, как вы ожидаете, поэтому мы не можем здесь много сделать. Если вы действительно думаете, что что-то не так, попробуйте объяснить ожидаемое поведение/результат в вопросе. –
Да, я знаю, что этот код работает должным образом, я спрашиваю, есть ли более удобный способ проверить такие вещи. На самом деле тест на ошибку 401 особенно уродлив, потому что я не знаю, как управлять этим, не избегая установки соединения. – Slyfest
@Slestfest, какую библиотеку аутентификации вы используете для своего приложения? Есть немного лучший способ сделать это, но применяется только в том случае, если вы используете Guardian, следовательно, мой вопрос. – Svilen