0
トークンヘッダーを必要とするapiエンドポイントのテストに苦労しています。この考え方は、認証トークンの有無にかかわらず、2つのケースをテストすることです。トークン認証のテスト
私は以下の作業方法を考え出しましたが、やや不器用な気がします。
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
@Slyfestどの認証ライブラリをあなたのアプリに使用していますか?それを行うには少し良い方法がありますが、Guardianを使用している場合にのみ適用されますので、私の質問です。 – Svilen