0
토큰 헤더가 필요한 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
에 오신 것을 환영에 유래합니다! 코드가 예상대로 작동하는 것처럼 보이므로 여기서 할 수있는 일은별로 없습니다. 정말로 뭔가 잘못되었다고 생각하면 예상되는 행동/결과를 설명해보십시오. –
네,이 코드가 예상대로 작동하고 있다는 것을 압니다. 이런 종류의 것들을 테스트 할 더 편리한 방법이 있는지 묻고 있습니다. 실제로 401 오류에 대한 테스트는 연결 설정을 피하지 않고 이것을 관리하는 방법을 모르기 때문에 특히 추악합니다. – Slyfest
@Slyfest 귀하의 앱에 어떤 인증 라이브러리를 사용하고 있습니까? 약간 더 나은 방법이 있지만 Guardian을 사용하는 경우에만 적용되므로 내 질문에 답하십시오. – Svilen