How to test Phoenix LiveView UI only application?

Background

I have a Phoenix LiveView application called WebInterface that has little to no logic inside it.
Instead, this application only has logic related to managing windows and UI related tasks.

This application is an umbrella app, that uses another umbrella app, called core which has all the business logic and goodies.

Problem

I am using excoveralls to make sure I have a decent level of test coverage across my umbrella apps, WebInterface included.

However, since there is very little logic to test, I have a low amount of test coverage, namely 18%.

This would be fine, except that excoveralls has a minimum threshold of 90%, which causes the coveralls.github task to fail and thus fails the pipeline as well.

Question

  • Is there a standard way to increase test coverage for this type of UI only applications in Elixir?
  • What tools do you usually use?
  • If this is not possible/not good idea, how would you fix the issue?

I didn’t get it… can’t you use LiveView testing helpers from Phoenix.LiveViewTest — Phoenix LiveView v0.20.3?

Can you give an example of what parts of the phoenix app are not covered. View, controllers, templates, … can be tested. I think things like the router and the endpoint are more likely to be problematic, just like anything macro heavy.

This is the coverage of said WebInterface:

Randomized with seed 868975
----------------
COV    FILE                                        LINES RELEVANT   MISSED
  0.0% lib/web_interface.ex                          111        2        2
 91.6% lib/web_interface/application.ex               64       12        1
  0.0% lib/web_interface/components/core_compon      907      190      190
  0.0% lib/web_interface/components/layouts.ex         7        0        0
  0.0% lib/web_interface/components/operation_p       39       10       10
  0.0% lib/web_interface/controllers/error_html       19        1        1
  0.0% lib/web_interface/controllers/error_json       15        1        1
  0.0% lib/web_interface/controllers/page_contr       13        3        3
  0.0% lib/web_interface/controllers/page_html.        5        0        0
 40.0% lib/web_interface/desktop/menu_bar.ex          46        5        3
100.0% lib/web_interface/desktop/window_utils.e       33        6        0
  0.0% lib/web_interface/endpoint.ex                  48        0        0
  0.0% lib/web_interface/live/activate_live.ex       232       72       72
  0.0% lib/web_interface/live/deactivate_live.e      206       63       63
  0.0% lib/web_interface/live/login_live.ex           99       22       22
  0.0% lib/web_interface/live/logout_live.ex          40        9        9
  0.0% lib/web_interface/live/profile_live.ex         21        4        4
100.0% lib/web_interface/persistence.ex               24        5        0
  0.0% lib/web_interface/persistence/button.ex        32        8        8
 92.3% lib/web_interface/persistence/strategy.e       45       13        1
 96.0% lib/web_interface/persistence/syndicate.      152       50        2
 87.5% lib/web_interface/persistence/user.ex          33        8        1
  0.0% lib/web_interface/router.ex                    35        8        8
 80.0% lib/web_interface/telemetry.ex                 71        5        1
  0.0% test/support/conn_case.ex                      37        2        2

For example, lib/web_interface is the default auto generated filed from Phoenix, which has a bunch of macros:

  Do NOT define functions inside the quoted expressions
  below. Instead, define additional modules and import
  those modules here.

source: market_manager/apps/web_interface/lib/web_interface.ex at master · Fl4m3Ph03n1x/market_manager · GitHub

Another example is theapps\web_interface\lib\web_interface\components\core_components.ex file, with also 0% testing.

This is the auto generated file of core components that comes with Phoenix (with some minor personal additions, but that is besides the point): market_manager/apps/web_interface/lib/web_interface/components/core_components.ex at master · Fl4m3Ph03n1x/market_manager · GitHub

Both files have 0% tests (being auto generated for the most part), thus lowering the total percentage of tests done. Coveralls doesn’t consider this.

Can you point to a tutorial or a state of the art article that explains on how to use these helpers in a project? I was not able to find any standard way of testing liveview apps.

This is old but still valid:

It shows how to interact with a LV and a component in a test.
From that you just use the other functions that makes sense with your LV, like clicking buttons (render_click) or submitting forms (render_submit) or using hooks or other events etc.