Skip to content

Instantly share code, notes, and snippets.

@devnacho
Forked from tsubery/phoenix_session_test.md
Created May 17, 2022 21:50
Show Gist options
  • Save devnacho/e8a749ba530c9f0ef5b6d92536fa41f0 to your computer and use it in GitHub Desktop.
Save devnacho/e8a749ba530c9f0ef5b6d92536fa41f0 to your computer and use it in GitHub Desktop.
How to set session in phoenix controller tests

If you are reading this, you probably tried to write code like this

test "testing session" do
  build_conn()
  |> put_session(:user_id, 234)
  |> get("/")
  ...
  end

And got this exception:

(ArgumentError) session not fetched, call fetch_session/2

The reason for this error is that Plug expects session to be initialized before allowing any access. One way to solve it is to add the following to support/conn_case.ex

  using do
    quote do
    
      ... #don't add this line :)
      
      def session_conn() do
        build_conn() |> Plug.Test.init_test_session(%{})
      end
    end
  end

Now your tests can use session_conn() to build a Plug.Conn with initialized session. For example:

test "testing session" do
  session_conn()
  |> put_session(:user_id, 234)
  |> get("/")
  ...
  end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment