phoenixのcontrollerテストでsessionにユーザIDを設定する

バージョン情報

  • elixir 1.6.4
  • phoenix 1.3.3

本題

phoenixのデフォルトのテスト方法でcontrollerのテストを書くときに、セッションを扱い時がある。その方法を調べたときにちょっと古い記事を拾ってしまうと、いろいろと大変な手順が見つかる。
だけれど、Plug.Testモジュールのinit_test_sessionを使ったら楽だったという話。

いろいろと省いたコード例は次のような感じ。

# test/example_app_web/session_controller_test.exs
defmodule ExampleAppWeb.SessionControllerTest do
  use Plug.Test

  test "GET /", %{conn: conn} do
    conn = conn
      |> init_test_session(%{user_id: 1})
      |> get("/")

    assert redirected_to(conn) =~ "/mypage"
  end
end

/にアクセスしたときに、ログインしていれば/mypageにリダイレクトするコントローラのテストである。

タイトルとURLをコピーしました