【发布时间】:2016-07-03 20:21:18
【问题描述】:
我正在努力测试需要令牌标头的 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 您为您的应用使用什么身份验证库?有一种更好的方法可以做到这一点,但仅适用于您使用 Guardian 时,因此我的问题。