【问题标题】:Assign current user in session for tests在会话中分配当前用户进行测试
【发布时间】:2017-07-09 22:03:15
【问题描述】:

我找到了与 here 和 here 类似的答案,但它似乎不起作用。

我在测试时无法将current_user 分配给会话。我的测试是这样设置的

setup do
  %User{
    id: 123456,
    name: "MyName",
    email: "abc@gmail.com",
    password_hash: Comeonin.Bcrypt.hashpwsalt("password")
  } |> Repo.insert

 {:ok, user: Repo.get(User, 123456) }
end

我的测试是

test "renders index.html on /coping-strategy", %{user: user} do
  conn = conn
      |> assign(:current_user, user)
      |> get(coping_strategy_path(conn, :index))
  assert html_response(conn, 200) =~ "Coping strategies"
end

当我在这里检查 conn 时,current_user 已正确分配给 user。但是,当我在测试期间检查控制器中的 conn 时,current_user 始终是nil。我也尝试使用build_conn,但它仍然为零。

这里是控制器:

def index(conn, _params) do
  user_id = conn.assigns.current_user.id
  coping_strategies = Post
                      |> Post.get_coping_strategies(user_id)
                      |> Repo.all
  render conn, "index.html", coping_strategies: coping_strategies
end

如果我尝试分配除 current_user 之外的其他内容,那么当我检查控制器中的 conn 时,它就会显示出来。因此,如果我在测试中添加了|> assign(:stuff, "test"),那么我在 conn 中分配了stuff: "test"。如果我在测试和控制器中将 current_user 更改为 current_user2,它会起作用,因为 current_user2 会更新并按照我的预期传递。

有什么原因我不能像这样分配当前用户,为什么它总是为零?我是否缺少任何步骤来特别针对 current_user 执行此操作?

编辑

这是在身份验证插件中设置 current_user 的位置

def call(conn, repo) do
  user_id = get_session(conn, :user_id)
  user = user_id && repo.get(Healthlocker.User, user_id)
  assign(conn, :current_user, user)
end

【问题讨论】:

  • 您能否在您的应用程序中发布分配current_user 的代码(身份验证插件?)?即使已经设置,您也可能将其设置为 nil。
  • @Dogbert 看起来像。当我运行测试时,用户是nil。

标签: testing elixir phoenix-framework


【解决方案1】:

由于您在测试中直接在assigns 中设置:current_user,如果assigns 在身份验证插件中包含:current_user,则需要跳过从会话的:user_id 中获取用户:

def call(conn, repo) do
  if conn.assigns[:current_user] do
    conn
  else
    user_id = get_session(conn, :user_id)
    user = user_id && repo.get(Healthlocker.User, user_id)
    assign(conn, :current_user, user)
  end
end

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多