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

The bullshit of implementing web accessibility

Do you retroactively apply web accessibility (WCAG) to your apps, or is it already on your backlog for this sprint? Then you need to read this article. We – all frontend developers – are approaching WCAG completely wrong. It’s part of our job, but we treat it as an afterthought. Stop the bullshit about being EAA-compliant and make accessibility a real part of your work.

Continue reading

The bullshit of frontend development

Do you ever feel like the frontend of every website and application has become increasingly complex over time? In the past, we built everything using CSS, HTML, and a little bit of JavaScript, but now everything is done with Angular, React, or Vue, with just a bit of CSS and HTML. What has changed, and is this shift actually a positive one?

Continue reading

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