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
It seems like
init_test_session
requires a second argument/parameter, at least in the version ofPlug
I'm using – 1.8.3. The minimal call seems to bebuild_conn() |> Plug.Test.init_test_session(%{})
.