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.