Angular komt out of the box met twee sets van tools voor geautomatiseerd testen.
Standaard maakt Angular gebruik van Jasmine en Karma voor unit tests. Voor end to end tests wordt standaard Protractor geconfigureerd. Daar hoef je verder niets voor te doen. Zowel Jasmine en Karma als Protractor doen wat ze moeten doen. Maar zijn er ook alternatieven? En zijn die beter of slechter?
Unit testing: Jest
Voor unit testing op de frontend heb je nogal wat keuze uit frameworks. In een vorige project bij een klant heb ik al goede ervaringen opgedaan met Jest. En ook bij de AngularConnect-conferentie hoorde ik er goede verhalen over. Om Jest in je Angular-project te gebruiken moet je het één en ander configureren. Tot nu toe weerhield me dat ervan om het voor nieuwe projecten in te zetten. Maar ik ben er eens goed voor gaan zitten, en het configureren van Jest blijkt al met al nogal mee te vallen. Een beschrijving van de stappen heb ik beschreven op mijn github.
Wat zijn mijn ervaringen met Jest? Om te beginnen: Jest is snel! En dat is prettig, want unit tests wil je vaak kunnen draaien. Wat misschien nog wel beter is: Jest integreert naadloos in WebStorm of IntelliJ. Je krijgt alle testresultaten overzichtelijk in je IDE te zien. En als je een enkele test nog eens opnieuw wilt draaien, kun je dat doen vanuit de kantlijn van je spec-file (zie afbeelding).
Jest gebruikt bijna volledig dezelfde syntax als Jasmine. Dus als je de syntax van Jasmine kent, kun je zo met Jest aan de slag. Alleen de syntax voor spy objects is iets anders, maar dat staat duidelijk uitgelegd in de documentatie van Jest.
End to end testing: Cypress
Voor end to end testing heb ik tot nog toe vooral gebruik gemaakt van protractor. Protractor werkt, maar eerlijk gezegd ben ik er niet heel erg gelukkig mee. Ik loop regelmatig tegen plotseling ontstane versieverschillen met de webdrivermanager aan (als je niet weet wat dat is: dat wil je ook eigenlijk helemaal niet hoeven weten) en ook in het schrijven en onderhouden van tests loop ik regelmatig tegen dingen aan die net niet lekker werken.
Cypress heeft de zaken heel anders aangepakt dan Protractor. Om te beginnen draait het bijvoorbeeld al niet op Selenium (en dat is een voordeel!). En ook Cypress is snel! En als je mij niet gelooft, hoor het dan ook eens van een ander (okee, die is ook niet helemaal objectief, maar toch). Een nadeel van Cypress was dat het alleen op Chromium draaide, maar ook daar is verandering in gekomen.
Ook de stappen voor het installeren van Cypress in je Angular project heb ik beschreven op mijn github. Als je de stappen volgt dan is Cypress volledig geïntegreerd in je Angular-project. Als je ng e2e typt dan wordt Cypress in een apart venster geopend, en kun je interactief al je tests draaien. Wil je de tests headless op een build server draaien, dan is dat ook geen probleem, want dat kan ook. In het laatste geval maakt Cypress van elke gefaalde test een filmpje en een screenshot van elke gefaalde test (zie video). Mijn eerste ervaringen met Cypress zijn erg positief. Alles draait erg soepel en snel, de tooling werkt heel fijn en het schrijven van tests lijkt redelijk eenvoudig.
Conclusie
Na behoorlijk wat met Jasmine, Karma en Protractor gewerkt te hebben, zijn Jest en Cypress voor mij echt een verademing. Wil je er zelf ook mee aan de slag? Hier vind je wat eerste stappen over hoe je de boel kunt configureren.
Cookies zijn kleine tekstbestanden die door websites kunnen worden gebruikt om gebruikerservaringen efficiënter te maken.
Volgens de wet mogen wij cookies op uw apparaat opslaan als ze strikt noodzakelijk zijn voor het gebruik van de site. Voor alle andere soorten cookies hebben we uw toestemming nodig.
Deze website maakt gebruik van verschillende soorten cookies. Sommige cookies worden geplaatst door diensten van derden die op onze pagina’s worden weergegeven.
Via de cookieverklaring op onze website kunt u uw toestemming op elk moment wijzigen of intrekken.
In ons privacybeleid vindt u meer informatie over wie we zijn, hoe u contact met ons kunt opnemen en hoe we persoonlijke gegevens verwerken.
Strikt noodzakelijke cookies
Strikt Noodzakelijke Cookie moet te allen tijde worden ingeschakeld, zodat we uw voorkeuren voor cookie-instellingen kunnen opslaan.
Analytische cookies
Analytische cookies meten websitebezoek, waarmee de eigenaar zijn website kan verbeteren. Denk aan het aantal bezoekers en de meest bezochte webpagina’s.
Google Analytics
_ga
2 years
Used to distinguish users.
_gid
24 hours
Used to distinguish users.
_gat
1 minute
Used to throttle request rate. If Google Analytics is deployed via Google Tag Manager, this cookie will be named _dc_gtm_<property-id>.
AMP_TOKEN
30 seconds to 1 year
Contains a token that can be used to retrieve a Client ID from AMP Client ID service. Other possible values indicate opt-out, inflight request or an error retrieving a Client ID from AMP Client ID service.
_gac_<property-id>
90 days
Contains campaign related information for the user. If you have linked your Google Analytics and Google Ads accounts, Google Ads website conversion tags will read this cookie unless you opt-out. Learn more.
Schakel eerst strikt noodzakelijke cookies in om uw voorkeuren op te slaan!
Marketing
De volgende marketing cookies worden gebruikt:
Hotjar
Cookie naam
Beschrijving
Duur
_hjClosedSurveyInvites
This cookie is set once a visitor interacts with a Survey invitation modal pop-up. It is used to ensure that the same invite does not re-appear if it has already been shown.
365 days
_hjDonePolls
This cookie is set once a visitor completes a Poll using the Feedback Poll widget. It is used to ensure that the same Poll does not re-appear if it has already been filled in.
365 days
_hjMinimizedPolls
This cookie is set once a visitor minimizes a Feedback Poll widget. It is used to ensure that the widget stays minimized when the visitor navigates through your site.
365 days
_hjDoneTestersWidgets
This cookie is set once a visitor submits their information in the Recruit User Testers widget. It is used to ensure that the same form does not re-appear if it has already been filled in.
365 days
_hjMinimizedTestersWidgets
This cookie is set once a visitor minimizes a Recruit User Testers widget. It is used to ensure that the widget stays minimized when the visitor navigates through your site.
365 days
_hjDoneSurveys
This cookie is set once a visitor completes a survey. It is used to only load the survey content if the visitor hasn't completed the survey yet.
365 days
_hjIncludedInSample
This cookie is set to let Hotjar know whether that visitor is included in the sample which is used to generate Heatmaps, Funnels, Recordings, etc.
365 days
_hjShownFeedbackMessage
This cookie is set when a visitor minimizes or completes Incoming Feedback. This is done so that the Incoming Feedback will load as minimized immediately if they navigate to another page where it is set to show.
365 days
Onlinesucces.nl
Cookie naam
Beschrijving
Duur
logger
connect.onlinesucces.nl
365 days
Facebook
Naam
Aanbieder
Doel
Vervaldatum
fr
http://facebook.com/
Used by Facebook to deliver a series of advertisement products such as real time bidding from third party advertisers.
3 months
ilionx.com analytics
Naam
Aanbieder
Doel
Vervaldatum
CPSESSIONID
http://www.ilionx.com/
Used for website usage analytics to distinguish user sessions.
30 minutes
CPUSERID
http://www.ilionx.com/
Used for website usage analytics and personalization to distinguish users.
900 days
Schakel eerst strikt noodzakelijke cookies in om uw voorkeuren op te slaan!