Skip to content

Commit

Permalink
add auto_connect option to LiveView mount options
Browse files Browse the repository at this point in the history
to specify that a LiveView should not automatically connect
on dead render. When navigated to and there's already a connection
established, this option has no effect.

See https://elixirforum.com/t/liveview-feature-to-cancel-second-render/67770
  • Loading branch information
SteffenDE committed Mar 5, 2025
1 parent c44c48e commit 107cb2f
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 2 deletions.
1 change: 1 addition & 0 deletions assets/js/phoenix_live_view/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const PHX_ERROR_CLASS = "phx-error"
export const PHX_CLIENT_ERROR_CLASS = "phx-client-error"
export const PHX_SERVER_ERROR_CLASS = "phx-server-error"
export const PHX_PARENT_ID = "data-phx-parent-id"
export const PHX_AUTO_CONNECT = "data-phx-auto-connect"
export const PHX_MAIN = "data-phx-main"
export const PHX_ROOT_ID = "data-phx-root-id"
export const PHX_VIEWPORT_TOP = "viewport-top"
Expand Down
3 changes: 2 additions & 1 deletion assets/js/phoenix_live_view/live_socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ import {
PHX_PARENT_ID,
PHX_VIEW_SELECTOR,
PHX_ROOT_ID,
PHX_AUTO_CONNECT,
PHX_THROTTLE,
PHX_TRACK_UPLOADS,
PHX_SESSION,
Expand Down Expand Up @@ -372,7 +373,7 @@ export default class LiveSocket {

joinRootViews(){
let rootsFound = false
DOM.all(document, `${PHX_VIEW_SELECTOR}:not([${PHX_PARENT_ID}])`, rootEl => {
DOM.all(document, `${PHX_VIEW_SELECTOR}:not([${PHX_PARENT_ID}]):not([${PHX_AUTO_CONNECT}="false"])`, rootEl => {
if(!this.getRootById(rootEl.id)){
let view = this.newRootView(rootEl)
// stickies cannot be mounted at the router and therefore should not
Expand Down
7 changes: 7 additions & 0 deletions lib/phoenix_live_view.ex
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@ defmodule Phoenix.LiveView do
this option will override any layout previously set via
`Phoenix.LiveView.Router.live_session/2` or on `use Phoenix.LiveView`
* `:auto_connect` - if false, instructs the LiveView JavaScript client
to not automatically connect to the server on dead render.
This is useful when you have a static page that does not require
any connected functionality, but should render over the existing
connection when navigating from an already connected LiveView.
Defaults to `true`.
"""
@callback mount(
params :: unsigned_params() | :not_mounted_at_router,
Expand Down
6 changes: 6 additions & 0 deletions lib/phoenix_live_view/static.ex
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,12 @@ defmodule Phoenix.LiveView.Static do

data_attrs = if(router, do: [phx_main: true], else: []) ++ data_attrs

data_attrs =
if(not Map.get(socket.private, :auto_connect, true),
do: [phx_auto_connect: "false"],
else: []
) ++ data_attrs

attrs = [
{:id, socket.id},
{:data, data_attrs}
Expand Down
10 changes: 9 additions & 1 deletion lib/phoenix_live_view/utils.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ defmodule Phoenix.LiveView.Utils do
alias Phoenix.LiveView.{Socket, Lifecycle}

# All available mount options
@mount_opts [:temporary_assigns, :layout]
@mount_opts [:temporary_assigns, :layout, :auto_connect]

@max_flash_age :timer.seconds(60)

Expand Down Expand Up @@ -437,6 +437,14 @@ defmodule Phoenix.LiveView.Utils do
}
end

defp handle_mount_option(%Socket{} = socket, :auto_connect, value) do
if not is_boolean(value) do
raise "the :auto_connect mount option must be a boolean, got: #{inspect(value)}"
end

put_in(socket.private[:auto_connect], value)
end

@doc """
Calls the `handle_params/3` callback, and returns the result.
Expand Down
22 changes: 22 additions & 0 deletions test/e2e/support/lifecycle.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
defmodule Phoenix.LiveViewTest.E2E.LifecycleLive do
use Phoenix.LiveView

@impl Phoenix.LiveView
def mount(params, _session, socket) do
auto_connect = case params do
%{"auto_connect" => "false"} -> false
_ -> true
end

{:ok, socket, auto_connect: auto_connect}
end

@impl Phoenix.LiveView
def render(assigns) do
~H"""
<div>Hello!</div>
<.link navigate="/lifecycle">Navigate to self (auto_connect=true)</.link>
<.link navigate="/lifecycle?auto_connect=false">Navigate to self (auto_connect=false)</.link>
"""
end
end
1 change: 1 addition & 0 deletions test/e2e/test_helper.exs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ defmodule Phoenix.LiveViewTest.E2E.Router do
live "/form/stream", E2E.FormStreamLive
live "/js", E2E.JsLive
live "/select", E2E.SelectLive
live "/lifecycle", E2E.LifecycleLive
end

scope "/issues", Phoenix.LiveViewTest.E2E do
Expand Down
57 changes: 57 additions & 0 deletions test/e2e/tests/lifecycle.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const {test, expect} = require("../test-fixtures")
const {syncLV} = require("../utils")

test.describe("auto_connect", () => {
let webSocketEvents = []
let networkEvents = []
let consoleMessages = []

test.beforeEach(async ({page}) => {
networkEvents = []
webSocketEvents = []
consoleMessages = []

page.on("request", request => networkEvents.push({method: request.method(), url: request.url()}))

page.on("websocket", ws => {
ws.on("framesent", event => webSocketEvents.push({type: "sent", payload: event.payload}))
ws.on("framereceived", event => webSocketEvents.push({type: "received", payload: event.payload}))
ws.on("close", () => webSocketEvents.push({type: "close"}))
})

page.on("console", msg => consoleMessages.push(msg.text()))
})

test("connects by default", async ({page}) => {
await page.goto("/lifecycle")
await syncLV(page)

expect(webSocketEvents).toHaveLength(2)
})

test("does not connect when auto_connect is false", async ({page}) => {
await page.goto("/lifecycle?auto_connect=true")
// eslint-disable-next-line playwright/no-networkidle
await page.waitForLoadState("networkidle")
expect(webSocketEvents).toHaveLength(0)

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh6tYwVKB-an8C\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"ImNICyM2EGsbBUEHYDwkLQccMDsHPj9nH7-QjLTYP40O8cuI5z_ySOhQ\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg2dFl3VktCLWFuOEN3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAV_3iZZUBYgABUYA.DGvOHuBaJqpIrsHZpRuFsoLQTEeIcR98fpZxPstweDs\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg2dFl3VktCLWFuOEN3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAV_3iZZUBYgABUYA.orcGjGSOD5h2MXvbktMwVx9xGOjChqpZMAX16o7AW0w\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh6tYwVKB-an8C\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"Izk2OD4-N3AubjMaKRcTUF0XWQ8sGzF_ImSbwDsBe_BRqHB4oq6MxjfI\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh6lqeg-uRDX5i\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"HzACMQ8eamU2BCY6O3cQcXpOA24RLhYGOAZvwM8-qqDPqZtCJ-eWzcnY\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg2bHFlZy11UkRYNWl3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAPvXiZZUBYgABUYA.Dzo1KFBDZQbnG0LBivhzZPCU98KVpc4x16fEWyPYg8A\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg2bHFlZy11UkRYNWl3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAPvXiZZUBYgABUYA.n2CPILNYCJM5h5HrjU9CdoY0i8InYbDzoluFpeqh9kU\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh6lqeg-uRDX5i\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"IxsoJCsCMHsoRiA9C2QRd3QBN1ooKy4OsjpcSQb3o3BWAIuEDbQcCfVQ\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh6d5t28nVuX3i\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"K15DZDscPT0vWxloPSobRQdSKCATPQwktsuTSnNKBkVPVonthjIBJXtB\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg2ZDV0MjhuVnVYM2l3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAGu3iZZUBYgABUYA.jctdjetlMb6SgYLbxgonWh0p5K661hb3eHKtZTwwLVU\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg2ZDV0MjhuVnVYM2l3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAGu3iZZUBYgABUYA.kHLqUfWDCZa3V2JSUIIQ9EvQRHrC22F_vYCcffVxZ9c\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh6d5t28nVuX3i\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"MGAPQj9ARhwGfS5iAhEyaR0NIBABAyofoM9rW25jkMaZiTGXr5ArXfRy\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh3aMGIDNOInQC\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"WSAFBQsoACMUEz8dSA8UGgM-YA4DFgU3-qIgERBouIGp8mnYmsWXigsT\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgzYU1HSUROT0luUUN3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYA4h_iZZUBYgABUYA.9pa7KfNWmfxFLusWWnJQpb1aXjKZIo-CJjf1wH5mf_M\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgzYU1HSUROT0luUUN3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYA4h_iZZUBYgABUYA.U5h8WYyzXE-PmJfYUzV0UCoMCcY0_6Dm8Ualv_xOiQ0\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh3aMGIDNOInQC\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"QQAAJWMwJj0HYxULMTMrJgI7AA8-ISdb5QLG-Jdqf9mfAQQelv7YTPQ8\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh3Mvx7LHiInLC\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"BigyKDA1PysrdgQCOxwOABAkKm04ImciNYbqAjHNACo0mIiPGprXNZVz\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgzTXZ4N0xIaUluTEN3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAyhHiZZUBYgABUYA.CoEQF1sa_BjTnaXer5GSyYOndGkp1nfOuyIVEuUAlws\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgzTXZ4N0xIaUluTEN3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAyhHiZZUBYgABUYA.0yi6kfHZCpxvWuVGNmFVfFtfGtYxf3bF2-zpW5PrjCk\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh3Mvx7LHiInLC\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"HAViLkEKRQ9bBghTZi01BhU_NHdOKVw_Tt2w0U2j13ca0xRVBklB8Qmg\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh2_p1r7qguG4h\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"CEQ3DBoJVgBiFh0HbwxfGB4hRDYkNB8Rx1ofJsnc6ChbV5oQIl0SsuWC\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgyX3AxcjdxZ3VHNGh3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYADwTiZZUBYgABUYA.0kH-8EdS4CvrZ18AUOIvi_aSQsYPbm0fCmZGKKaiZ0Q\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgyX3AxcjdxZ3VHNGh3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYADwTiZZUBYgABUYA.Q3NUW7FagEuNMHxCDOWdzCu_DV_jqyzYl_ETJ-YNIxE\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh2_p1r7qguG4h\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"KRAeWyINbTY_LDsmehRHDzQrASEIdzghYeF1rwUUkyNCC-wFcfuD_6ps\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh0U_NoONo1TPk\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"MCwCGyYae2AsfBknCFR-PFAKWkFzVgQzYFKhOc68KEQSc77rh9i5CbW_\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgwVV9Ob09ObzFUUGt3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAGlHhZZUBYgABUYA.AvkfUNULLobQWWlypyuIF3LqrQ_xj2vl9i7nP4YiKFw\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgwVV9Ob09ObzFUUGt3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAGlHhZZUBYgABUYA.wIK561lt1FDA-YDuSpbf4rzEMBluWwpj6D_MWVUCU_4\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh0U_NoONo1TPk\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"IzwcMV4-Gw1WCn0cLio4B25ffg0EWh8tJVUB7GVU135hEIqIVlMy4nLA\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh0OdRTeapAlqD\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"QiNsPSdGCQACNF0YKWF9HgIHDAghEh5WvAXoW2ZZSnhHJTKhOCebGBQ7\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgwT2RSVGVhcEFscUR3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAQUrhZZUBYgABUYA.XcYL1DYSxnmL3IWtePWljIbHJuqi8zoK06Ll36u2LLc\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgwT2RSVGVhcEFscUR3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAQUrhZZUBYgABUYA.qOmX84MRxfwlaua217R78vtyyPBYZXRfrdUR0g5oLXc\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh0OdRTeapAlqD\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"ZjgHFQYTEi5lGFlpDFtGEnsIMzAHNABXRZ3GvgAt4Bl9onpd6LZZadO6\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh0IjkmaTCa19C\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"YB0JOi1uAzAVYQE2NQUjMEIoAEcFCEpT4Ecbd4axw-tavfaEuCE4Nox1\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgwSWprbWFUQ2ExOUN3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAEUThZZUBYgABUYA.fAy5XyjbFD4rDGruL2HgOerL-4GDJdtz--TZHysYrzc\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgwSWprbWFUQ2ExOUN3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAEUThZZUBYgABUYA.RLWJCCwnCsMIj4RCbMcxtTWffMGCWH0Qk2koqC9lHVA\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh0IjkmaTCa19C\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"JhQQLSc9BXFaPRkROSwxMwQGaDAuD3E0rLzungg98qlFzOsF3m-CehCV\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh8ZwE7vl-apSh\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"BxQ2YDUrWgICLlRpHA1VBw1MBz1dMnQBJZW6qn9ztveYEEgQtxwHodY6\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg4WndFN3ZsLWFwU2h3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYA-G7jZZUBYgABUYA.kAPze7NwzpJyR4ZQ0xWZ8qyiJj96XG69WJ0x7M5hf1g\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg4WndFN3ZsLWFwU2h3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYA-G7jZZUBYgABUYA.KAxpifyXei6GEbRfbAHSnq4XgNwxPpQlwTXlqh8-Aw8\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh8ZwE7vl-apSh\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"GgwDYTFzDDcuH3VCIxBkGi4CJDNeH1UGWBb7u6oOXGDrzXVLW6TFlIx1\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh8R3F8mxaiJPB\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"Cgw2CjYZNFMtSzsWB3Q8K3IEEwgiSDInOfbXclx7IfzfeMMi_LQRNzjO\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg4UjNGOG14YWlKUEJ3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAsmbjZZUBYgABUYA.e64XtLcwKnes-BlhgUe9XAAe6sC5A6EbmkuyFIdEtlc\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg4UjNGOG14YWlKUEJ3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAsmbjZZUBYgABUYA.ANfLkoVaOOuZ43PRxszvTvHEb0i2LcKDpcEYBsDn1SI\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh8R3F8mxaiJPB\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"BDs9Z21APDtcfjghLFUVOGxwFA8zBA4qAQi585p_8SyQNldzA8VU_6VB\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

3) [webkit] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh8KD7_MvVuW6i\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"DT8zADwjDEYZFBN-LXAQMgQvNix0BQpSgOa6SvD4mnC7c6wsQ_nmFPPe\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg4S0Q3X012VnVXNml3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAhF7jZZUBYgABUYA.pxA6MovE_nJtKxQOMvy-WvMjlbcpmSsIgP-6-eGXY0I\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg4S0Q3X012VnVXNml3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAhF7jZZUBYgABUYA.jXUCardlrlQ0zj--VjchKDRP5YIMH1rb_I1mW-1mgoo\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh8KD7_MvVuW6i\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"PEgbQC0Kfj0MOQ95Jw8LFjY9MDlxPyIDV8IvB_6OxC_0iIlWcMhxCjx4\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh4-1-TWmpV2ui\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"AgEsFhYCFSZJEzQmIRoRAyp9YgdSAB1cnmEgbVLHdBgVrjghoLTrdpZh\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg0LTEtVFdtcFYydWl3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAb4niZZUBYgABUYA.hcOBAvnaZYVpVPYOZm51jQTyM_eEHRPhqEuSyQUeCj0\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg0LTEtVFdtcFYydWl3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAb4niZZUBYgABUYA.jx78jb3LlaDVHDkCh4SHSl_OX5xxOfaVP3k0nlsBfQQ\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh4-1-TWmpV2ui\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"DyksIi4ZOwRAICkGPj0VJAkFAQNnJyVQcEESZMbjmqzvmMcOL47vQWbd\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh4wjmFR1AuXgh\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"fDMHJgooABwEJEItBCdEHi4pCSU-KTEp3EfTXpetKW2_MOpAyXPIvPdE\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg0d2ptRlIxQXVYZ2h3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAcnriZZUBYgABUYA.tyf5J-lL8XsAIzR2rkPwFsFJo3lJx1iT7i45IRpD6HE\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg0d2ptRlIxQXVYZ2h3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAcnriZZUBYgABUYA.sJcq6htSl_kSqN3bzW0RYfqftDQHY0xmW8RFgOd6-bo\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh4wjmFR1AuXgh\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"JEcuRx4gLRscHh0hK1xHKD48PyArGzAUk1O5LxHsSmmSb4swiMfLcbex\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

2) [firefox] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh4i8N_d3ThnXB\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"LxwIeSViOjMyPBV7XGBBDiJSBAoUNB0TBNc0b5CFbcV09-wGodwiDGJP\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmg0aThOX2QzVGhuWEJ3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAK2ziZZUBYgABUYA.C6vLI5LvOgnzbKpXGHgSO9NwIrLB04iqK-S0zQuO4H8\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmg0aThOX2QzVGhuWEJ3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAK2ziZZUBYgABUYA._Iq4Uqy2xEabl0R71qX-Kz_S8Nz-c9EJPHMbYt-t-iQ\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh4i8N_d3ThnXB\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"IhsSLBckLTwGGjY9H3tjCnRSFVYmIggMOIyePsTIVEuvz6UC9df5vQ_O\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh1yoxvIdCFmNh\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"enAuCyQREX1JIxQMbxwTNwsJUgwMMC1886_QtGuDpJP9_mdNCyan4fhM\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgxeW94dklkQ0ZtTmh3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYATbPhZZUBYgABUYA.gyu5isLqNIpQRbiznLrs4TSdIXudG_KpxXj7rxmFUcY\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgxeW94dklkQ0ZtTmh3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYATbPhZZUBYgABUYA.xhLVHaD5GDXppyic0MEXQhLZXfS10LS4JIAcPsHfzus\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh1yoxvIdCFmNh\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"KCEYEyJkMVhoGw5sXzcRPQE1cS9eJgF8jgiIr2UaQrJYoFfDIEBMfpDM\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh1sKD2CZw3GIB\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"QVQyU3cMCx8cKj8Gb2UDBCcYZhFfEAcj9mmjC_AqxHsNW5TeJm2R0iKW\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgxc0tEMkNadzNHSUJ3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAgqzhZZUBYgABUYA.8IfvWePZqTthwmV7vpvanuLq8abyhjNfQQOD9-0-4kQ\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgxc0tEMkNadzNHSUJ3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAgqzhZZUBYgABUYA.W6-MWLTuDsM9K3P4nF567awTQFGcgNcGbeLbF7BG7LE\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh1sKD2CZw3GIB\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"VW0QQVkQAiA1Fx8XCwpmUw4DERkpLwgc-TOxmCHNQuS_3Z12cvEZFVDh\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29

Check failure on line 36 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

1) [chromium] › tests/lifecycle.spec.js:32:3 › auto_connect › does not connect when auto_connect is false Error: expect(received).toHaveLength(expected) Expected length: 0 Received length: 2 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh1loq_Zr07WCB\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle?auto_connect=true\",\"params\":{\"_csrf_token\":\"CTtOMzAdAgViMQ4ZKTxdakxbJjgiAS89BlcaUda7Wb7RP_lZt4BYNskz\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgxbG9xX1pyMDdXQ0J3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYAq6XhZZUBYgABUYA.MofP18fnpBB_t01Dmz7BogwAC5soLvXbFAlxSwRnK38\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgxbG9xX1pyMDdXQ0J3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAq6XhZZUBYgABUYA.oXhxfcFmPpQxqkfC1vXw8XMUvg2lEX4JfcS9zQvM-RU\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh1loq_Zr07WCB\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"fS9gNV0QLkQGERQJTDxcdX0GEydaPi4r6xMg8iMv3B-B5_mEEiwF6Ljl\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}] 34 | // eslint-disable-next-line playwright/no-networkidle 35 | await page.waitForLoadState("networkidle") > 36 | expect(webSocketEvents).toHaveLength(0) | ^ 37 | }) 38 | 39 | test("connects when navigating to a view with auto_connect=true", async ({page}) => { at /__w/phoenix_live_view/phoenix_live_view/test/e2e/tests/lifecycle.spec.js:36:29
})

test("connects when navigating to a view with auto_connect=true", async ({page}) => {
await page.goto("/lifecycle?auto_connect=false")
// eslint-disable-next-line playwright/no-networkidle
await page.waitForLoadState("networkidle")
expect(webSocketEvents).toHaveLength(0)
await page.getByRole("link", {name: "Navigate to self (auto_connect=true)"}).click()
await syncLV(page)
expect(webSocketEvents).toHaveLength(2)
})

test("stays connected when navigating to a view with auto_connect=false", async ({page}) => {
await page.goto("/lifecycle")
await syncLV(page)
expect(webSocketEvents).toHaveLength(2)
await page.getByRole("link", {name: "Navigate to self (auto_connect=false)"}).click()
await syncLV(page)
expect(webSocketEvents).toHaveLength(7)

Check failure on line 55 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

4) [chromium] › tests/lifecycle.spec.js:49:3 › auto_connect › stays connected when navigating to a view with auto_connect=false Error: expect(received).toHaveLength(expected) Expected length: 7 Received length: 6 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh0e-aQV03c2Ci\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle\",\"params\":{\"_csrf_token\":\"J1kmQWMlKmMyYiIBECgMJ0sRS3hCbxMNeou9TDP-T-DldbZN8yyIoVA_\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgwZS1hUVYwM2MyQ2l3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAk1vhZZUBYgABUYA.csaeLGQZ7GGedSEw4Y0IWu4CuYoRaDnmNuOVTvcuIlI\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgwZS1hUVYwM2MyQ2l3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAk1vhZZUBYgABUYA.01f1Oegqv4OTDOKK7JvSfxRSf4xH1Ly3sQm5_Gs3V1o\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh0e-aQV03c2Ci\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"LkwmCXwTGD42OlEbIyc4MScYXVIcQwo_lzuqKrbpPu7vWmnXTpoc1zXm\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}, {"payload": "[\"4\",\"8\",\"lv:phx-GCnh0e-aQV03c2Ci\",\"phx_leave\",{}]", "type": "sent"}, {"payload": "[\"11\",\"11\",\"lv:phx-GCnh0e-aQV03c2Ci\",\"phx_join\",{\"redirect\":\"http://localhost:4004/lifecycle?auto_connect=false\",\"params\":{\"_csrf_token\":\"J1kmQWMlKmMyYiIBECgMJ0sRS3hCbxMNeou9TDP-T-DldbZN8yyIoVA_\",\"_mounts\":0,\"_mount_attempts\":0,\"_live_referer\":\"http://localhost:4004/lifecycle\"},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgwZS1hUVYwM2MyQ2l3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IABawyRDL4SkYbgYAk1vhZZUBYgABUYA.csaeLGQZ7GGedSEw4Y0IWu4CuYoRaDnmNuOVTvcuIlI\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgwZS1hUVYwM2MyQ2l3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYAk1vhZZUBYgABUYA.01f1Oegqv4OTDOKK7JvSfxRSf4xH1Ly3sQm5_Gs3V1o\",\"flash\":null}]", "type": "sent"}, {"payload": "[\"11\",\"11\",\"lv:phx-GCnh0e-aQV03c2Ci\",\"phx

Check failure on line 55 in test/e2e/tests/lifecycle.spec.js

View workflow job for this annotation

GitHub Actions / e2e test (1.18.1, 27.2)

4) [chromium] › tests/lifecycle.spec.js:49:3 › auto_connect › stays connected when navigating to a view with auto_connect=false Error: expect(received).toHaveLength(expected) Expected length: 7 Received length: 6 Received array: [{"payload": "[\"4\",\"4\",\"lv:phx-GCnh183s8_FOeWEi\",\"phx_join\",{\"url\":\"http://localhost:4004/lifecycle\",\"params\":{\"_csrf_token\":\"GyQEPRUAG1ABJioXFQE1chQ8EAYIAhcgqSrPvZOi7nsMYsw1ueuVqiDV\",\"_mounts\":0,\"_mount_attempts\":0},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgxODNzOF9GT2VXRWl3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYACL7hZZUBYgABUYA.79UnJGIAhQU4wEdiOUzfHNupYWbT2jD4XJobOh59tr4\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgxODNzOF9GT2VXRWl3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYACL7hZZUBYgABUYA.ILMN3XCZ6gDo_X6_X_fQDTiABHpRGRU6WSVQ96PDH8c\"}]", "type": "sent"}, {"payload": "[\"4\",\"4\",\"lv:phx-GCnh183s8_FOeWEi\",\"phx_reply\",{\"status\":\"ok\",\"response\":{\"rendered\":{\"0\":\" content=\\\"XhkQKxI0PFMAJygLBhp7DS4ALD0bKAwP4nfFqnhj6oqQJh9NOYImbC_y\\\"\",\"1\":\"\",\"2\":{\"0\":{\"0\":\" href=\\\"/lifecycle\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=true)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"1\":{\"0\":\" href=\\\"/lifecycle?auto_connect=false\\\"\",\"1\":\" data-phx-link-state=\\\"push\\\"\",\"2\":\"\",\"3\":{\"s\":[\"Navigate to self (auto_connect=false)\"]},\"s\":[\"<a\",\" data-phx-link=\\\"redirect\\\"\",\"\",\">\",\"</a>\"],\"r\":1},\"s\":[\"<div>Hello!</div>\\n\",\"\\n\",\"\"]},\"s\":[\"<meta name=\\\"csrf-token\\\"\",\">\\n<script>\\n window.hooks = {}\\n</script>\\n<script src=\\\"/assets/phoenix/phoenix.min.js\\\">\\n</script>\\n\",\"\\n<script type=\\\"module\\\">\\n import {LiveSocket} from \\\"/assets/phoenix_live_view/phoenix_live_view.esm.js\\\"\\n\\n let Hooks = {}\\n Hooks.FormHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n Hooks.FormStreamHook = {\\n mounted() {\\n this.pushEvent(\\\"ping\\\", {}, () => this.el.innerText += \\\"pong\\\")\\n }\\n }\\n let csrfToken = document.querySelector(\\\"meta[name='csrf-token']\\\").getAttribute(\\\"content\\\");\\n let liveSocket = new LiveSocket(\\\"/live\\\", window.Phoenix.Socket, {\\n params: {_csrf_token: csrfToken},\\n hooks: {...Hooks, ...window.hooks}\\n })\\n liveSocket.connect()\\n window.liveSocket = liveSocket\\n</script>\\n<style>\\n * { font-size: 1.1em; }\\n</style>\\n\",\"\"]},\"liveview_version\":\"1.1.0-dev\"}}]", "type": "received"}, {"payload": "[\"4\",\"8\",\"lv:phx-GCnh183s8_FOeWEi\",\"phx_leave\",{}]", "type": "sent"}, {"payload": "[\"11\",\"11\",\"lv:phx-GCnh183s8_FOeWEi\",\"phx_join\",{\"redirect\":\"http://localhost:4004/lifecycle?auto_connect=false\",\"params\":{\"_csrf_token\":\"GyQEPRUAG1ABJioXFQE1chQ8EAYIAhcgqSrPvZOi7nsMYsw1ueuVqiDV\",\"_mounts\":0,\"_mount_attempts\":0,\"_live_referer\":\"http://localhost:4004/lifecycle\"},\"session\":\"SFMyNTY.g2gDaAJhBXQAAAAIdwJpZG0AAAAUcGh4LUdDbmgxODNzOF9GT2VXRWl3B3Nlc3Npb250AAAAAHcKcGFyZW50X3BpZHcDbmlsdwR2aWV3dy1FbGl4aXIuUGhvZW5peC5MaXZlVmlld1Rlc3QuRTJFLkxpZmVjeWNsZUxpdmV3CXJvb3Rfdmlld3ctRWxpeGlyLlBob2VuaXguTGl2ZVZpZXdUZXN0LkUyRS5MaWZlY3ljbGVMaXZldwhyb290X3BpZHcDbmlsdwZyb3V0ZXJ3JkVsaXhpci5QaG9lbml4LkxpdmVWaWV3VGVzdC5FMkUuUm91dGVydwxsaXZlX3Nlc3Npb25oAncHZGVmYXVsdG4IAJ-X84jQ4SkYbgYACL7hZZUBYgABUYA.79UnJGIAhQU4wEdiOUzfHNupYWbT2jD4XJobOh59tr4\",\"static\":\"SFMyNTY.g2gDaAJhBXQAAAADdwJpZG0AAAAUcGh4LUdDbmgxODNzOF9GT2VXRWl3BWZsYXNodAAAAAB3CmFzc2lnbl9uZXdqbgYACL7hZZUBYgABUYA.ILMN3XCZ6gDo_X6_X_fQDTiABHpRGRU6WSVQ96PDH8c\",\"flash\":null}]", "type": "sent"}, {"payload": "[\"11\",\"11\",\"lv:phx-GCnh183s8_FOeWEi\",\"phx
})
})

0 comments on commit 107cb2f

Please sign in to comment.