Unit testen van private methods in Angular

Unit testen van private methods in Angular

Het liefst test je alles binnen jouw Angular project, alleen dan weet je dat je code goed werkt na elke verandering. Binnen een component test je naast private en public attributen ook private en public methods. Public methods kun je gemakkelijk testen door in de unit test deze methods direct aan te roepen. Met verschillende parameters test je elk pad binnen deze method en weet je dat de code werkt en blijft werken.

Bij private methods is dit niet zo gemakkelijk, maar je wilt wel hetzelfde bereiken. Je hebt de methode waarschijnlijk met een reden private gemaakt, het simpelweg public maken van een method voor een unit test is `not-done` en dat wil je dus niet. Maar wat kun je wel doen?

Testen via public methods

Private methods kun je testen via public methods. Jouw private method zal waarschijnlijk door events of andere methods worden aangeroepen. Je kunt een test schrijven die zo'n event triggert of die een public method uitvoert en daarmee ook de private method uitvoert.

Verplaats logica van een method naar een service

Als jouw private method veel logica bevat (bijvoorbeeld twee if-statements of meer) kan het lastig zijn om via public methods of events alle paden van een private method te testen. Door het verplaatsen van de logica naar een service maak je jouw code beter testbaar. In plaats van dat je de directive test schrijf je een unit test voor de service die je hebt geschreven. Doordat de service public methods implementeert is de code beter toegankelijk en kun je alle testpaden beter bereiken met jouw test.

Wat als dit niet werkt

Als je niet je private methods kan testen via een public method of event, of als jouw logica niet verplaatst kan worden naar een service heb je waarschijnlijk te maken met een ander probleem:

  • De private method is code die nooit wordt gebruikt bij het uitvoeren van jouw applicatie
  • Je hebt een `design-smell`. Dit betekent dat jouw indeling van code niet ideaal is. Meestal is dit doordat jouw class te complex is opgezet/
  • Je hebt een onnodig private gemaakt.

Lees ook

How I added my Porsche EV to Homekit

Since my childhood, I have been passionate about cars and everything related to them. Even at a young age, I knew every model. I spent hours flipping through car magazines searching for new facts and always dreamed of owning an exotic car. Initially, I used to dream of owning a Ferrari, but as I grew older and wiser,…

Continue reading

CSS-only Carousel Slider

As a frontend developer, my days are primarily filled with crafting JavaScript-based components using frameworks like Vue, React, or Angular. These frameworks excel at empowering me to create reusable frontend elements, whether it's buttons, modals, links, or accordions. However, as I reflect on my reliance on these…

Continue reading

Homekit `Power consumption` sensor

Recently, I purchased a HomeWizard Wi-Fi P1 Meter. This device provides me with insights into the electricity and gas usage in my home. With 4 solar panels installed, I anticipate generating excess electricity during the spring and summer months. Despite knowing the capacity of the panels, I am unsure of the exact…

Continue reading