caslu
Testing authenticated routes in Live View
Hello guys, i was coding my new project and something curious happened to me. Gust giving a bit of context, i’ve been using Phoenix and Elixir for a while but not LiveView, which i’m getting more a little more comfortable now. But here’s the “problem”, i’m gonna provide a simplified example:
In my routes i have a “/” homepage path, which have a button to navigate to a protected route “/protected”, consider that in this project i’m managing authentication through phx.gen.auth (MyAppWeb.UserAuth module), when i tried to test this flow it continues to redirect me for /protected even when i’m not logged in, i’ll leave some snippets below:
router.ex
live_session :require_authenticated_user,
on_mount: [{EurekaWeb.UserAuth, :ensure_authenticated}] do
live "/users/settings", UserSettingsLive, :edit
live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
live "/protected_page", AuthenticatedPageLive # The protected page
end
And the failing test snippet:
test "opens guest user sign in modal when user is not signed in", %{conn: conn} do
{:ok, view, html} = live(conn, ~p"/")
html = view |> element("a", "Create a new room") |> render_click()
assert_redirect(view, ~p"/users/guest/log_in")
end
But when i execute the test here’s the output
** (ArgumentError) expected EurekaWeb.PageLive.Home
to redirect to "/users/guest/log_in", but got a redirect to "/protected_page"
Can someone explain me why in test scenario live view for some reason do not redirect to login modal such as when i’m interacting through web?
Please leave me a feedback if for some reason the questions isn’t clear enough, thanks guys!
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #performance










First Post!
krwenholz
Hard to say without knowing the rest of your codebase, but here are some gotchas that have caught me:
ensure_authenticationthat isn’t protecting the page correctly.Have you verified it works outside the test?