ashrafhasson

ashrafhasson

Hello all,

I’m trying to run the liveview update test below

    test "updates branch in listing", %{conn: conn, branch: branch} do
      {:ok, index_live, _html} = live(conn, ~p"/ar/branches")

      assert index_live 
             |> element("#branches-#{branch.id} a", "Edit") 
             |> render_click() =~ "Edit"

      assert_patched(index_live, ~p"/ar/branches/#{branch.id}/edit")

      assert index_live
             |> form("#branch-form", branch: @invalid_attrs)
             |> render_change() =~ "Cannot be empty"
    end

and it appears as if the render_click() call is not causing the edit view to be rendered although manually clicking the Edit element/link works fine when tested manually (in the browser). The test complains that there’s no #branch-form element in the view and that appears to be correct as rendering the view shows the elements listing (index) page.

This test returns the following:

 ** (ArgumentError) expected selector "#branch-form" to return a single element, but got none within:
...

I don’t think I need to run follow_redirect (and that didn’t work anyway) but clearly I’m missing something here :smiley:. Might someone kindly point me in the right direction with a hint, please?

I’m running this with liveview v1.0.18 I upgraded from v1.0.9 after giving up on making it work with that but it may be something else that I’m doing.

The index.html.heex template with the target element has this:

  <:action :let={{_id, branch}}>
    <div class="sr-only">
      <.link navigate={~p"/#{current_locale()}/branches/#{branch}"}>Show</.link>
    </div>
    <.link patch={~p"/#{current_locale()}/branches/#{branch}/edit"}>Edit</.link>
  </:action>

and attempting to target the element directly with element/2 with something like “#branches-#{branch.id} a:nth-child(2)” yielded the same result.

Showing Posts 1 to 2

jswanner

jswanner

Just to be clear, are the Edit and Index routes using the same LiveView? If not, you don’t want to be using patch, and instead navigate is what you want.

Is there any async stuff happening that needs to resolve before asserting on presence of elements? If so, render_async can help:

      assert index_live 
             |> element("#branches-#{branch.id} a", "Edit") 
             |> render_click() =~ "Edit"

      render_async(index_live)

      assert index_live
             |> form("#branch-form", branch: @invalid_attrs)
             |> render_change() =~ "Cannot be empty"
ashrafhasson

ashrafhasson OP

@jswanner ah, thanks for pointing that out, that makes sense. Yes, it’s 2 different liveviews. I’ve updated the test to use render_async(index_live) and the link to navigate={…} but the previous assertion now shows rendering the click caused a redirect?

  1) test Index updates branch in listing (MyAppWeb.Subdomain.BranchLiveTest)
     test/myapp_web/live/branch_live_test.exs:86
     ** (FunctionClauseError) no function clause matching in Kernel.=~/2

     The following arguments were given to Kernel.=~/2:
     
         # 1
         {:error, {:live_redirect, %{kind: :push, to: "/ar/branches/1/edit"}}}
     
         # 2
         "Edit"
     
     Attempted function clauses (showing 3 out of 3):
     
         def =~(left, "") when is_binary(left)
         def =~(left, right) when is_binary(left) and is_binary(right)
         def =~(left, right) when is_binary(left)
     
     code: |> render_click() =~ "Edit"
— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
widianto
I think I’ve found a small improvement I could contribute to &lt;%= web_namespace %&gt;.CoreComponents (installer/templates/phx_web/compo...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews